팩토리 패턴(factory pattern) 팩토리 패턴(factory pattern)은 어떤 객체를 만들지를 전적으로 팩토리에 위임합니다. 예시를 위해 빵(bread) 팩토리를 만들어보겠습니다. 먼저 Bread라는 타입을 정의하고 세 종류의 빵을 구현합니다. type Bread = { kind: string } class FranceBread implements Bread { kind = 'Baguette' } class IndeaBread implements Bread { kind = 'Flatbread' } class DanishBread implements Bread { kind = 'Ryebread' } 이 예에선 type을 사용했는데, type 대신 인터페이스를 사용해도 됩니다:) 이제 빵 팩토..
final 클래스 흉내 내기 TypeScript는 클래스나 메서드에 final 키워드를 지원하지 않지만 클래스에서 final의 효과를 흉내내기 어렵지 않습니다. final 키워드는 클래스나 메서드를 확장하거나 오버라이드할 수 없게 만드는 기능입니다. TypeScript에선 비공개 생성자(private constructor)로 final 클래스를 흉내 낼 수 있습니다. class MessageQueue { private constructor(private message: string[]) {} } 생성자를 private으로 선언하면 new로 인스턴스를 생성하거나 클래스를 확장할 수 없게 됩니다. class MessageQueue { private constructor(private message: stri..
데코레이터(decorator) 데코레이터(decorator)는 TypeScript의 실험적 기능으로 클래스, 클래스 메서드, 프로퍼티, 메서드 매개변수를 활용한 메타 프로그래밍에 깔끔한 문법을 제공합니다. 데코레이터는 장식하는 대상의 함수를 호출하는 기능을 제공하는 문법입니다. 예제를 통해 데코레이터가 어떻게 동작하는지 알아보겠습니다. @serializable class APIPayload { getValue(): Payload { // ... } } 클래스 데코레이터인 @serializable은 APIPayload 클래스를 감싸고 있으며 선택적으로 이를 대체하는 새 클래스를 반환합니다. 데코레이터를 사용하지 않고 같은 기능을 아래처럼 구현할 수도 있습니다. let APIPayload = serializ..
믹스인(mixin) JavaScript와 TypeScript는 trait이나 mixin 키워드를 제공하지 않지만 쉽게 직접 구현할 수 있습니다. 두 키워드 모두 둘 이상의 클래스를 상속받는 다중 상속(multiple inheritance)과 관련된 기능을 제공하며, 역할 지향 프로그래밍(role-oriented programming)을 제공합니다. 역할 지향 프로그래밍에선 "이것은 Shape이에요"라고 표현하는 대신 "측정할 수 있어요", "반지름을 가지고 있어요"처럼 속성을 묘사하는 방식을 사용합니다. 즉, "is-a" 관계 대한 'can', 'has-a' 관계를 사용합니다. 믹스인을 구현해 보겠습니다. 믹스인이란 동작과 프로퍼티를 클래스로 혼합(mix)할 수 있게 해주는 패턴으로, 다음 규칙을 따릅니..