본문 바로가기
Language/TypeScript

타입스크립트 클래스 알아보기

by 싯벨트 2024. 9. 7.
728x90

타입스크립트의 클래스에 대해 정리해보도록 한다.

공식문서의 클래스 파트를 참고했다. 자세한 설명이나 코드는 첨부된 공식문서를 참조하면 도움이 될 것이다.

자바스크립트의 클래스와 가장 크게 다른점은 this 키워드에 속성을 할당하려면 필드를 선언해야 한다는 것이다.

그런데 만약 수정자(접근 제어자)를 생성자의 매개변수 앞에 사용하는 경우, 필드 선언은 생략이 가능하다.

이것을 후에 설명되는 “Parameter Properties”부른다.

Class Members

클래스의 멤버는 크게 2가지로 나뉜다.

  • 필드(Field): 클래스 내부에 선언된 변수(속성)이다. 일반적으로 객체의 상태를 저장한다.
  • 메서드(Method): 클래스 내부에 정의된 함수이다. 객체의 동작을 정의한다.

Fields

  • 필드를 선언하면 기본적으로 public, writeable 속성이 만들어진다.
  • type annotation(타입 주석)은 옵셔널이지만 하지 않을 경우, 암묵적으로 any가 할당된다.
  • 초기값을 설정한 경우, 타입 추론에 사용되고 클래스의 인스턴스가 만들어 질 때 자동으로 할당된다.

readonly

  • readonly 수정자(modifier)는 생성자 밖에서 필드의 할당을 막는다.
  • 클래스의 인스턴스에서의 할당은 물론이고, 클래스 내부일지라도 생성자 밖에서의 할당 또한 불가하다.

Constructors

  • new를 통해 인스턴스가 형성될 때 자동으로 호출되는 메서드로, 함수와 동일하게 타입 주석, 초기값, 오버로드가 가능한 매개변수를 추가할 수 있다.
  • 리턴값은 항상 클래스 인스턴스 형식이어야 한다.

Super calls

  • 파생클래스는 생성자를 쓰는 경우, super()를 호출해야 한다.
  • 만약 this에 접근한다면, 반드시 super()를 먼저 호출해야 한다.

게터세터

  • getter/setter의 이름과 속성명이 같을 수 없기 때문에, 다르게 써야 하며 일반적으로 속성 이름 앞에 언더바(_)를 사용한다.
  • get만 있다면 readonly 속성이다
  • 세터 파라미터에 타입 주석이 없다면 게터의 타입 리턴값에서 추론된다.
  • get 접근자는 매개변수를 사용할 수 없고, set 접근자에는 반환값에 타입 주석을 사용할 수 없다.

Cass Heritage

Implements

  • 인터페이스를 상속받아서 구현한다.
  • 여러개를 상속받을 수 있다.
  • 상속받은 클래스가 인터페이스 타입으로 취급될 수 있는지 체크한다. 클래스의 타입을 변경하지 않는다는 것을 주의해야 한다.
  • 인터페이스의 옵셔널 속성은 파생 클래스에서 선언하지 않은 경우, 파생 클래스 인스턴스에 존재하지 않는다.

extends

  • 클래스를 상속받아서 구현한다.
  • 파생 클래스는 베이스 클래스의 속성들과 메서드를 모두 갖는다.
  • 베이스 클래스의 속성이나 메서드를 덮어 쓸 수 있다.
  • super는 베이스 클래스에 접근하기 위한 문법이다. (생성자, 메서드, 필드)
  • 메서드 오버라이드 시, 변수 개수 및 타입은 맞춰줘야 한다.

Member Visibility

  • 클래스 필드에 대해 접근 가능한 범위를 제어하는 수정자는 public, protected, private 3가지가 있다.
  • 수정자는 타입 체킹에서만 강제하며, 런타임에서는 접근 가능하다.
  • 브라켓 표현으로도 접근 가능하다.

Modifier (제어자, 수정자)

클래스 내부 서브 클래스 인스턴스

수정자 클래스 내부 서브 클래스 인스턴스
public O O O
protected O O x
private O x x
  • public
    • 디폴트 설정이고, 어디서든 접근 가능하다.
  • protected
    • 해당 클래스 내부 및 서브 클래스에서만 접근 가능하고, 인스턴스에서는 접근이 불가능하다.
    • 서브 클래스에서 수정자 없이 할당하여 오버라이드를 하면 서브클래스의 인스턴스에서는 사용 가능하게 되기 때문에,
      서브클래스에서 기본클래스의 protected 속성을 반복하는 것을 주의해야 한다.
  • private
    • 클래스 내부에서만 접근 가능하다.
    • 서브클래스에서 접근 불가하다.

Static

  • 클래스 인스턴스가 아닌 클래스 자체(생성자 객체 자체)에만 속하고, 접근 또한 클래스 자체에서만 가능하다.
  • Modifier과 함께 쓰일 수 있으며, 상속된다.

Parameter Properties

  • 생성자 내부에 public, private, protected 제어자 또는 readonly 와 함께 매개변수를 적어주면 필드를 따로 선언할 필요가 없다.
    자동으로 동일한 이름과 값을 클래스 내부 속성으로 변환한다.

추상 클래스

  • 인스턴스를 만들 수 없다.
  • 파생클래스는 추상 클래스의 추상 맴버(메서드, 필드)를 정의해야 한다.

참고문서

Documentation - Classes