TypeScript 공부(7)

김희목·2024년 8월 27일
0

패스트캠퍼스

목록 보기
50/53

클래스

타입스크립트에서 클래스 필드(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와 같은 키워드를 사용할 때 타입스크립트 컴파일러가 타입을 알고, 타입 오류를 방지할 수 있게 해줍니다.

접근 제어자 (Access Modifiers)

타입스크립트에서는 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 의 경우에도 접근하지 못합니다.

요약

타입스크립트에서 클래스의 필드 선언 시 타입과 초기 값을 명시하는 것은 타입 안전성을 보장하기 위함입니다. 또한, 접근 제어자를 사용하여 필드나 메서드의 접근 범위를 제한할 수 있습니다. 이로 인해 클래스의 구조를 더 명확하게 하고, 불필요한 접근을 방지할 수 있습니다.

0개의 댓글