Class

beomjin_97·2022년 12월 14일
0

typescript

목록 보기
3/7

1. 접근제어자

1.1 public

외부에서도 자유롭게 접근할 수 있다.
접근제어자를 선언하지 않을 시에 public으로 선언된다.

class User {
  public userId: string;
  constructor (_userId: string) {
    this.userId = _userId
  } 
}

new User('abz').userId;

1.2 private

클래스 외부에서의 접근을 막는다.

class User {
  private userId: string;
  constructor (_userId: string) {
    this.userId = _userId
  } 
}

new User('abz').userId;  // Error

1.3 protected

클래스와 그 하위 클래스를 제외한 외부에서의 접근을 막는다.

class User {
  protected userId: string; // private를 적용하면 VIP 클래스에서 접근제한
  constructor(_userId: string) {
    this.userId = _userId;
  }
}

class VIP extends User {
  constructor(_userId: string) {
    super(_userId);
  }

  public greet() {
    console.log(`Welcom ${this.userId}`)
  }
}

2. readonly, static

2.1 readonly

속성을 읽기 전용으로 설정하여 추가적인 재할당을 금지한다.

class User {
  readonly userId: string;
  constructor(_userId: string) {
    this.userId = _userId;
  }
}

const user = new User('abz')
user.userId = 'aby' // Error 

2.2 static

각 인스턴스가 아닌 클래스 자체에서 보이는 전역멤버를 생성
범용적인 값에 주로 사용

class User {
  public userId: string;
  constructor(_userId: string) {
    this.userId = _userId;
  }
  static age = 20;
}

const age = User.age

3. 추상 클래스

다른 클래스들이 파생될 수 있는 기초 클래스이다.
직접 인스턴스화 할 수 없다.
추상 메서드는 파생된 클래스에서 구현해야 한다.

abstract class Animal {
  protected name: string;

  constructor(name: string) {
    this.name = name;
  }

  abstract makeSound(): void;

  public move(): void {
    console.log("move");
  }
}

class Dog extends Animal {
  constructor(name: string) {
    super(name);
  }

  makeSound(): void {
    console.log(`${this.name} 멍멍!!`);
  }
}

const dog = new Dog("진돗개");
dog.makeSound();

const animal = new Animal('개') // Error

3.1 추상클래스를 활용한 디자인 패턴

  • 프로그램의 일부분을 서브 클래스로 캡슐화해 전체 구조를 바꾸지 않고 특정 단계의 기능을 바꾸는 것을 디자인 패턴이라고 한다.
  • 전체적인 알고리즘은 상위 클래스에서 구현하고 이외의 부분은 하위 클래스에서 구현한다.
  • 메서드의 코드 중복을 최소화 할 수 있다.
profile
Rather be dead than cool.

0개의 댓글