기존 Java, C# 등과의 차이

차분한열정·2021년 7월 4일
0

타입스크립트 정리

목록 보기
4/15

전통적인 객체 지향 언어인 Java, C# 등과 달리 자바스크립트는 그 자체가 좀 다른 특성을 가진다.

  • 함수가 굳이 클래스 등 안에 존재할 필요가 없고
  • Static Class같은 개념도 없다.

타입에 관한 개념도 다른데 기존 언어에는 string이거나 int일 수 있는 타입 이라는 개념을 나타낼 수가 없다. 하지만 타입스크립트에서는 string | number 이런 식으로 손쉽게 나타낼 수가 있다.

타입스크립트에서는 타입을 단지 여러 값들의 Set으로 이해하면 좋다. 예를 들어

이런 식으로 obj가 Pointlike 타입도 되고, Named 타입도 될 수 있는 이유는 각 타입이 요구하는 프로퍼티들을 갖고 있기 때문이다. 이건 이전 글에서 본 것처럼 타입스크립트는 Structual type system을 사용하기 때문이다. 그러니까 기존 언어들에서처럼 명시적으로 클래스를 표시해주거 이런 원리가 아니라 그냥 해석 시점에 해당 프로퍼티들을 갖고 있으면 될 뿐이다.
(TypeScript's type system is structural, not nominal)

이해하기 어렵다면 obj가 Pointlike 세트와 Named 세트에 둘다 해당된다고 생각하면 된다. 타입스크립트의 이런 점은 종종 이런 재미난 코드를 이해할 수 있게 해준다.

현재 { k: 10 } 이 객체 또한 Empty에 해당한다고 볼 수 있는 이유는 Empty에는 아무 프로퍼티도 없기 때문에, 이 객체는 결국 해당 클래스의 모든 프로퍼티를 갖고 있다고 볼 수 있기 때문이다.

이 코드에서도 마찬가지로 둘다 drive라는 메소드를 갖고 있기만 하면 되기 때문에 타입으로 지정된 클래스와 정작 객체를 생성할 때 사용한 클래스 종류가 달라도 에러가 발생하지 않는다.(물론 실무에서 이런 코드를 짜면 안 되겠..)

profile
성장의 기쁨

0개의 댓글