👶 TypeScript

👶 TypeScript

형태와 배열 가변성

형태와 배열 가변성 복합 타입의 서브 타입 규칙은 왜 언어마다 다를까요? 이번 글에서 소개하는 복잡한 타입(형태)을 예로 살펴보겠습니다. 일단 응용 프로그램에 사용자를 묘사하는 형태가 있다고 가정하고, 다음처럼 두 가지 타입으로 표현한다고 해봅시다. // 서버로부터 받은 기존 회원 type ExistingMemer = { id: number nickName: string } // 아직 서버에 저장하지 않은 새 회원 type NewMember = { nickName: string } 어떤 동아리의 회원 관리를 하게 되었는데 회원을 삭제하는 코드를 구현하는 역할을 맡았으면 다음과 같이 구현할 수 있습니다. // 서버로부터 받은 기존 회원 type ExistingMemer = { id: number; nick..

👶 TypeScript

가변성

가변성 보통 A라는 타입이 V라는 다른 타입의 서브 타입인지 아닌지 쉽게 판단할 수 있습니다. number, string 등의 단순 타입은 위의 흐름도로 확인하거나 자체적으로 쉽게 추론할 수 있습니다. (예: number는 number | string 유니온에 포함되므로 number | string의 서브 타입입니다.) 매개변수화된(제네릭) 타입 등 복합 타입에선 이 문제가 더 복잡해집니다. 아래의 상황을 살펴보겠습니다. Array는 어떤 상황에서 Array의 서브 타입이 될까요? 형태 A는 어떤 상황에서 다른 형태 B의 서브 타입이 될까요? 함수 (a: A) => B는 어떤 상황에서 다른 함수 (c: C) => D의 서브 타입이 될까요? 다른 타입을 포함하는 타입(Array처럼 타입 매개변수를 갖거나,..

👶 TypeScript

서브 타입과 슈퍼 타입

서브 타입 두 개의 타입 A와 B가 있고 B가 A의 서브 타입이면 A가 필요한 곳에는 어디든 B를 안전하게 사용할 수 있습니다. TypeScript에 기본적으로 있는 서브 타입의 몇 가지 예는 아래와 같습니다. 배열은 객체의 서브 타입입니다. 튜플은 배열의 서브 타입입니다. 모든 것은 any의 서브 타입입니다. never는 모든 것의 서브 타입입니다. Animal을 상속받는 Dog 클래스가 있다면 Dog는 Animal의 서브 타입입니다. 서브 타입의 정의를 여기에 적용하면 다음과 같이 설명할 수 있습니다. 객체를 사용해야 하는 곳에 배열도 사용할 수 있습니다. 배열을 사용해야 하는 곳에 튜플도 사용할 수 있습니다. any를 사용해야 하는 곳에 객체도 사용할 수 있습니다. 어디에나 never를 사용할 수 ..

👶 TypeScript

디자인 패턴 - 빌더 패턴(builder pattern)

빌더 패턴(builder pattern) 빌더 패턴(builder pattern)으로 객체의 생성과 객체 구현 방식을 분리할 수 있습니다. 제이쿼리(JQuery)나 ES6의 Map, Set 등의 자료구조를 사용해 봤다면 빌더 패턴에 친숙할 것입니다. 빌더 패턴은 아래처럼 구성됩니다. new RequestBuilder() .setURL('/users') .setMethod('get') .setData({ firstName: 'Cozy'}) .send() RequestBuilder를 구현하는 방법은 간단합니다. 우선 클래스 뼈대를 정의합니다. class RequestBuilder{} 첫 번째로 .setURL 메서드를 추가합니다. class RequestBuilder{ private url: string | ..

개발자 린다씨
'👶 TypeScript' 카테고리의 글 목록 (11 Page)