[TypeScript] Class(2)

haryun·2022년 9월 11일
0

TypeScript

목록 보기
4/6
post-thumbnail

패스트캠퍼스 TypeScript 강의 Ch 6. Class 복습 내용
참고링크

📕 Class 정리

📌 Singletone

어플리케이션이 실행되는 중간에 클래스로부터 단 하나의 오브젝트만 생성해서 사용하는 패턴

class ClassName {
  private static instance: ClassName | null = null;

  public static getInstance(): ClassName {
    // ClassName으로부터 생성된 오브젝트가 있으면 해당 오브젝트를 리턴하고, 없으면 생성하여 리턴
    if (ClassName.instance === null) {
      ClassName.instance = new ClassName();
    }
    return ClassName.instance;
  }
  private constructor() {}
}

constructor() 메서드에 접근제어자 private를 지정하면 인스턴스 생성이 불가능해지므로 간단하게 싱글톤 패턴을 구성할 수 있다. (검증된 디자인 패턴을 활용하여 코드를 작성하면 명확한 논리구조를 짤 수 있다는건 알겠지만 아직 싱글톤 패턴의 사용목적과 장단점을 정확하게 파악하지 못했다.. 추후 직접 활용하면서 확인해볼 예정😓)

📌 상속

extends 키워드를 통해 사용하며, 부모 클래스의 프로퍼티와 메서드를 물려받으면서 멤버를 추가로 지정할 수 있도록 해준다. (protected로 지정된 멤버를 활용할 수 있다.)

class Parent {
  constructor(protected _name: string, private _age: number) {} 
  // _name과 _age 모두 외부에서 접근이 불가능하지만 protected로 제어된 _name은 서브클래스에서는 접근이 가능하다.

  public print(): void {
    console.log(`이름은 ${this._name} 이고, 나이는 ${this._age}살 입니다.`);
  }
}

const p = new Parent('Mark', 30);
p.print(); // 이름은 Makr이고, 나이는 30살 입니다.

class Child extends Parent {
    constructor(age: number) {
      super('Mark Jr', age);
    }
}

const c = new Child(5); 
c.print(); // 이름은 Mark Jr. 이고, 나이는 5살 입니다.

자식 클래스의 생성자 구문에서는 super() 메서드를 호출해야 한다. (추가 구문 작성시 super()가 우선 작성되어야 함.)

📌 추상(Abstract) 클래스

abstract 키워드를 통해 완전하지 않은 클래스를 표현할 수 있으며, 해당 객체는 new를 통해 생성이 불가능하다.

abstract class AbstractPerson {
  protected _name: string = 'Haryun';

  abstract setName(name: string): void; // 메서드의 실행문을 구현하지 않음 => 불완전한 상태
}

// abstract 클래스는 상속을 통해 서브클래스에서 완전한 형태로 만들고 사용할 수 있음
class Person extends AbstractPerson {
  // 서브클래스는 상속받은 추상 클래스의 완전하지 못한 부분을 필수로 구현해야함 => 미작성시 에러 발생
  setName(name: string): void {
    this._name = name;
  }
}

const p = new Person();
p.setName('Harin') ;

추상 클래스는 추상 메서드 뿐만 아니라 일반 메서드와 프로퍼티도 포함할 수 있다.

0개의 댓글