From a3730f808514e99addfdf0f1ac67b1af9eb974a4 Mon Sep 17 00:00:00 2001 From: saysuhyun Date: Sat, 26 Apr 2025 08:40:08 +0900 Subject: [PATCH 1/2] =?UTF-8?q?5=EC=A3=BC=EC=B0=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../suhyun/5\354\243\274\354\260\250.md" | 243 ++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 "6\354\243\274\354\260\250/suhyun/5\354\243\274\354\260\250.md" diff --git "a/6\354\243\274\354\260\250/suhyun/5\354\243\274\354\260\250.md" "b/6\354\243\274\354\260\250/suhyun/5\354\243\274\354\260\250.md" new file mode 100644 index 0000000..c190c39 --- /dev/null +++ "b/6\354\243\274\354\260\250/suhyun/5\354\243\274\354\260\250.md" @@ -0,0 +1,243 @@ +# 아이템 53: 열거형 (enum) + +## 특징 + +- 숫자 열거형은 0부터 시작하는 것이 좋음 (이유는 추후 확인 필요) +- 상수 열거형(const enum)은 런타임에 완전히 제거됨. 단, preserveConstEnums가 true로 설정되면 정보가 저장됨. +- 문자형 열거형은 명목적 타이핑을 사용함 +- tsconfig.json에서 preserveConstEnums를 설정할 수 없고, --preserveConstEnums 플래그를 사용해야 함. + +## 1. 상수 열거형 (const enum) + +상수 열거형은 런타임에 제거됨. preserveConstEnums를 적용하면 제거되지 않음. + +```typescript +// 상수 열거형 +const enum Flavor { + VANILLA, + CHOCOLATE, + STRAWBERRY, +} + +let flavor = Flavor.CHOCOLATE; +``` + +## 2. 문자형 열거형과 명목적 타이핑 + +enum은 구조적 타이핑이 아닌 명목적 타이핑을 따르므로 "CHOCOLATE"와 같은 값을 Flavor.CHOCOLATE로 교체해야 함. + +```typescript +type Flavor = 'VANILLA' | 'CHOCOLATE' | 'STRAWBERRY'; + +const func = (flavor: Flavor) => flavor; +func('CHOCOLATE'); +``` + +## 3. 매개변수 속성 + +매개변수 속성은 코드가 늘어나고 혼란을 줄 수 있음. 일반 속성과 함께 사용할 때는 신중해야 함. + +```typescript +class Person { + constructor(public name: string) {} +} +``` + +## 4. 네임스페이스와 트리플 슬래시 임포트 + +타입스크립트의 모듈 시스템과 ES6 모듈 시스템이 호환되므로, `import`와 `export`를 사용해야 함. + +## 5. 데코레이터 + +타입스크립트의 데코레이터는 아직 표준화되지 않았음. 표준화되기 전에 사용하지 않는 것이 좋음. + +--- + +# 아이템 54: 객체를 순회하는 노하우 + +## 객체 순회 + +객체의 키와 값을 순회할 때, Object.keys(), Object.values(), Object.entries()를 사용하는 것이 좋음. + +```typescript +const obj = { name: 'Alice', age: 30 }; + +for (const [key, value] of Object.entries(obj)) { + console.log(key, value); +} +``` + +## 객체 순회 시 타입 추론 + +for-in 문을 사용할 때 객체에 없는 키를 참조하려고 하면 오류가 발생할 수 있음. 이런 문제는 Object.entries()를 사용하면 해결할 수 있음. + +## 1. 구조적 타이핑을 통한 오류 해결 + +`for-in`을 사용할 때 키와 값의 타입이 잘못 추론될 수 있음. `keyof`를 사용하여 타입을 명시적으로 정의하면 타입 오류를 방지할 수 있음. + +```typescript +const func = (person: Person) => { + let key: keyof typeof person; + for (key in person) { + console.log(person[key]); + } +}; +``` + +## 2. Object.entries() 활용 + +배열이나 객체를 순회할 때 Object.entries()를 사용하면 타입을 자동으로 추론할 수 있어 더 안전하고 간결하게 순회할 수 있음. + +```typescript +const func2 = (person: Person) => { + for (const [key, value] of Object.entries(person)) { + console.log(key, value); + } +}; +``` + +--- + +# 아이템 55: DOM 계층 구조 이해하기 + +## DOM 계층 + +DOM에는 EventTarget, Node, Element, HTMLElement 등의 다양한 계층이 존재함. 각 계층은 상속 관계로 연결되어 있으며, 타입스크립트에서는 이를 잘 이해하고 사용해야 함. + +- EventTarget: window, XMLHttpRequest +- Node: document, Text, Comment +- Element: HTMLElement, SVGElement +- HTMLElement: ``, `` +- HTML\*Element: `