-
클래스 기본
- 타입스크립트는 독립 함수를 이해하는 것과 동일한 방식으로 메서드를 이해
- 클래스 속성을 명시적으로 선언하면 타입스크립트는 클래스 인스턴스에서 무엇이 허용되고, 허용되지 않는지 빠르게 이해할 수 있음.
-
함수 속성과 메서드
- 메서드 접근 방식은 함수를 클래스 프로토타입에 할당하므로 모든 클래스 인스턴스는 동일한 함수 정의를 사용함.
- 함수 속성으로 메서드를 정의할 경우 클래스의 인스턴스당 새로운 함수가 생성됨.
class WithMehod { myMethod (){} } new WithMethod().myMethod === new WithMethod().myMethod // true class WithProperty{ myProperty : ()=>{} } // false new WithProperty().myProperty === new WithProperty().myProperty
- 초기화 검사 : 타입스크립트는 undefined 타입으로 선언된 각 속성이 생성자에서 할당되었는지 확인함. -> 엄격한 초기화
- 원시 초깃값을 갖는 readonly로 선언된 속성 -> 더 넓은 원싯값의 타입이 아니라 값의 타입이 가능한 한 좁혀진 리터럴 타입으로 유추됨.
-
인터페이스 구현
- 타입스크립트는 클래스 이름 뒤에 implements 키워드를 사용하여 클래스의 해당 인스턴스가 인터페이스를 준수한다고 선언할 수 있음.
- 인터페이스를 구현하는 것은 순전히 안전성 검사를 위한 것. -> 모든 인터페이스 멤버를 클래스 정의로 복사하지 않음 -> 타입 애너테이션이 없을 경우 구현과 관련된 오류가 아니라 any 타입과 관련된 타입 오류가 발생함.
-
클래스 확장
- extends 키워드를 사용하여 다른 클래스를 확장할 수 있음. -> 기본 클래스에 선언된 모든 메서드나 속성을 하위 클래스에서 사용할 수 있음.
-
할당 가능성
- 하위 클래스에 추가 속성이 있어 부모 클래스와 모든 멤버가 동일하지 않을 경우 부모 -> 자식으로 형변환 불가
- 하위 클래스의 모든 멤버가 부모 클래스와 동일하다면 부모 -> 자식으로 형변환 가능
- 자식 -> 부모는 언제나 형변환 가능
-
생성자 오버라이딩
- 자체 생성자가 없는 하위 클래스는 암묵적으로 기본 클래스의 생성자를 사용함.
- 하위 클래스가 자체 생성자를 선언하면 super 키워드를 통해 기본 생성자를 호출해야 함.
- 타입스크립트는 super()를 호출하기 전에 this 또는 super에 접근하려고 하는 경우 타입 오류를 보고함.
-
메소드 오버라이딩
-
타입스크립트에서 오버라이딩이 가능한 조건
- 상위 메서드( = 상위 클래스의 메서드)의 매개변수 타입은 오버라이딩 함수의 매개변수 타입과 같거나 더 포괄적이어야 한다.
- 상위 함수의 매개변수의 개수가 오버라이딩 함수의 매개 변수와 같거나 많아야 한다.
- 반환 값의 타입은 상위 함수와 같아야 한다. -> 오버 로딩과 차이점
- 메서드의 이름이 같아야 한다. (매개 변수의 이름은 달라도 됨)
-
-
속성 오버라이딩
- 상위 클래스의 속성의 타입이 포괄적이야 함.
-
추상 클래스
- 일부 메서드의 구현을 선언하지 않고, 대신 하위 클래스가 해당 메서드를 제공할 것을 예상하고 기본 클래스를 만드는 방법
- absract 키워드를 사용해서 선언
- 구현이 존재한다고 가정할 수 있는 일부 메서드에 대한 정의가 없기 때문에 추상 클래스를 직접 인스턴스화 할 수 없다.
-
멤버 접근성
- 자바스크립트에서는 # 를 사용해 private 클래스 멤버임을 나타냄. -> 타입스크립트보다 후에 도입됨.
-
타입 스크립트의 멤버 접근성
-
종류
- public (기본 값) : 모든 곳에서 누구나 접근 가능
- protected : 클래스의 내부 또는 하위 클래스에서만 접근 가능
- private : 클래스 내부에서만 접근 가능
- 타입 스크립트의 가시성 제한자는 타입 시스템 내에만 존재 -> 자바스크립트로 컴파일 되면 제거됨. -> js 코드에서는 public으로 선언됨.
- 타입 스크립트의 접근 제한자는 자바스크립트의 제한자와 함께 사용할 수 없다.
-
-
static
- 인스턴스 생성 없이 접근할 수 있는 클래스 멤버를 선언할 때 사용.