1. 접근제어자
타입스크립트의 클래스에서는 자바처럼 접근제어자를 사용할 수 있습니다.
public | private | protected |
모든 범위에서 접근 | 클래스 내부에서만 접근 | 클래스 내부 + 자식 클래스 접근 |
1-1. public
class Bus {
name: string;
public age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
const bus = new Bus("1", 10);
console.log(bus.name); // 1
console.log(bus.age); // 10
아무것도 작성하지 않으면 public 입니다.
1-2. private
class Bus {
name: string;
private age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
const bus = new Bus("1", 10);
console.log(bus.name); // 1
console.log(bus.age); // 에러
진짜 실행되지 않는 건 아닙니다.
컴파일 시점에만 에러라고 표시해주죠.
자바스크립트로 컴파일하면 이렇게 바뀌기 때문입니다.
class Bus {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
const bus = new Bus("1", 10);
console.log(bus.name); // 1
console.log(bus.age); // 10
export {};
정말로 접근을 제한하고 싶다면 # 문법을 쓸 수 있습니다.
이건 정말로 에러가 납니다.
class Bus {
name: string;
#age: number;
constructor(name: string, age: number) {
this.name = name;
this.#age = age;
}
}
const bus = new Bus("1", 10);
console.log(bus.name); // 1
console.log(bus.#age); // 에러
1-3. protected
protected 는 자식클래스 외부에서 사용하려고 하면 에러가 발생합니다.
class Bus {
name: string;
protected age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
class SeatedBus extends Bus {
getAge() {
return this.age;
}
}
const bus = new SeatedBus("1", 10);
console.log(bus.name); // 1
console.log(bus.age); // 에러
console.log(bus.getAge()); // 10
1-4. 생성자의 접근제어자
생성자에 접근제어자를 사용할 수 있습니다.
하지만 생성자에 설정하면 동일한 필드를 만들어 주기 때문에
동일한 이름의 필드를 만들 수 없습니다.
이를 활용하여 다음과 같이 사용합니다.
class Bus {
constructor(private name: string, public age: number) {}
}
const bus = new Bus("1", 10);
console.log(bus.age); // 10
2. 추상 클래스
추상 클래스는 abstract 키워드로 만들 수 있습니다.
추상 메서드는 구현부가 없습니다.
추상 메서드를 구현하지 않으면 에러가 납니다.
abstract class Logger {
log(msg: string) {
this.write(msg);
}
abstract write(msg: string): void;
}
class GeneralLog extends Logger {
constructor() {
super();
}
write(msg: string): void { // 구현하지 않으면 에러
console.log("추상메서드", msg);
}
}
const log = new GeneralLog();
log.write("test"); // 추상메서드 test
3. 인터페이스의 활용
인터페이스는 자바 처럼 필요한 것들을 만들어 두고
반드시 이 조건을 만족하는 객체들을 생성하게 할 수 있습니다.
클래스를 구현한다고 하죠.
extends가 아니라 implements를 사용합니다.
인터페이스는 public 접근제어자만 사용 가능합니다.
이 인터페이스를 구현한 클래스는 접근제어자를 맞춰줘야 합니다.
public name: string을
private name: string으로 하면 에러가 발생합니다.
interface Vehicle {
name: string;
age: number;
}
class Bus implements Vehicle {
constructor(public name: string, public age: number) {}
}
const bus: Bus = new Bus("좌석버스", 10);
console.log(bus.age); // 10
'TypeScript' 카테고리의 다른 글
[TypeScript] 타입스크립트 데코레이터 (0) | 2025.05.27 |
---|---|
[TypeScript] 타입스크립트 제네릭 (1) | 2025.05.27 |
[TypeScript] 타입스크립트 인터페이스 확장 (0) | 2025.05.26 |
[TypeScript] 타입스크립트 인터페이스 (0) | 2025.05.26 |
[TypeScript] 타입스크립트 오버로딩 (0) | 2025.05.26 |