타입스크립트에서 클래스 필드(first, last, age 등)를 선언할 때, 해당 필드의 타입과 초기 값을 지정할 수 있습니다. 이는 자바스크립트와의 주요 차이점 중 하나입니다. 자바스크립트에서는 필드를 선언할 때 타입을 명시할 필요가 없으며, 초기화도 constructor 내부에서만 이루어집니다. 그러나 타입스크립트에서는 타입 안전성을 보장하기 위해 필드의 타입을 미리 선언하고, 원하는 경우 초기값도 설정할 수 있습니다.
예를 들어, 다음 코드에서
class UserA {
first: string = '';
last: string = '';
age: number = 0;
constructor(first: string, last: string, age: number) {
this.first = first;
this.last = last;
this.age = age;
}
getAge() {
return `${this.first} ${this.last} is ${this.age}`;
}
}
first: string = '', last: string = '', age: number = 0
여기서 first, last, age 필드가 타입스크립트 문법에 따라 선언되었습니다. 각 필드는 타입이 지정되어 있으며, 빈 문자열이나 0과 같은 기본값으로 초기화됩니다. 기본값을 설정하면 해당 클래스가 인스턴스화될 때 자동으로 이 값을 가집니다.
이 타입 선언과 초기화는 this.first, this.last, this.age와 같은 키워드를 사용할 때 타입스크립트 컴파일러가 타입을 알고, 타입 오류를 방지할 수 있게 해줍니다.
타입스크립트에서는 public, private, protected와 같은 접근 제어자를 사용할 수 있습니다. 이들은 클래스의 필드나 메서드에 접근할 수 있는 범위를 지정합니다.
public: 기본 접근 제어자입니다. 이 필드나 메서드는 클래스 외부에서 접근 가능합니다.
private: 이 필드나 메서드는 클래스 외부에서 접근할 수 없으며, 해당 클래스 내부에서만 접근할 수 있습니다.
protected: 이 필드나 메서드는 클래스 내부와 자식 클래스에서만 접근할 수 있습니다.
예를 들어, 다음과 같이 접근 제어자를 사용할 수 있습니다
class UserA {
private first: string;
private last: string;
public age: number;
constructor(first: string, last: string, age: number) {
this.first = first;
this.last = last;
this.age = age;
}
public getAge() {
return `${this.first} ${this.last} is ${this.age}`;
}
}
여기서 first와 last는 private으로 설정되어, 클래스 외부에서 직접 접근할 수 없습니다.
age는 public이므로 외부에서도 접근할 수 있습니다.
이 접근 제어자는 객체의 필드와 메서드에 대한 접근을 제한하고, 코드의 캡슐화를 높여줍니다.
class UserA {
first: string = ''
last: string = ''
age: number = 0
constructor(first: string, last: string, age: number) {
this.first = first
this.last = last
this.age = age
}
getAge() {
return `${this.first} ${this.last} is ${this.age}`
}
}
class UserB extends UserA {
getAge() {
return `${this.first} ${this.last} is ${this.age}`
}
}
class UserC extends UserB {
getAge() {
return `${this.first} ${this.last} is ${this.age}`
}
}
그러면 해당 코드에서 접근자를 설정해 보면 public일 경우는 모든 class에서 접근하여 사용할 수 있습니다. 하지만
protected일 경우에는 UserA와 후손들 즉, UserB,UserC 처럼 UserA로 부터 상속된 클래스만 접근할 수 있고, 그외에 모든 클래스는 접근이 불가능합니다.
또한 private의 경우에는 UserA에서만 접근이 가능하고 상속받은 UserB,UserC 의 경우에도 접근하지 못합니다.
타입스크립트에서 클래스의 필드 선언 시 타입과 초기 값을 명시하는 것은 타입 안전성을 보장하기 위함입니다. 또한, 접근 제어자를 사용하여 필드나 메서드의 접근 범위를 제한할 수 있습니다. 이로 인해 클래스의 구조를 더 명확하게 하고, 불필요한 접근을 방지할 수 있습니다.