[이펙티브 타입스크립트] 아이템 36 - 해당 분야의 용어로 타입 이름 짓기

Minha Ahn·2023년 8월 22일
1
post-thumbnail

⭐타입 이름의 중요성

  • 엄선된 타입, 속성, 변수의 이름은 의도를 명확히 하고 코드와 타입의 추상화 수준을 높여준다.
  • 잘못 선택한 타입 이름은 코드의 의도를 왜곡하고 잘못된 개념을 심어 주게 된다.

🔍의미가 불분명한 타입 선언 예시

interface Animal {
	name: string;         // 동물의 학명? vs 일반적인 명칭?
	endangered: boolean;  // 멸종 위기? vs 멸종?
	habitat: string;      // 너무 범위가 넓음
};

const leopard: Animal = {
	name: 'Snow Leopard',
	endangered: false,
	habitat: 'tundra',
};

🔍의미가 분명한 타입 선언 예시

interface Animal {
	commonName: string;
	genus: string;
	species: string;
	status: ConservationStatus;
	climates: KoppenClimate[];
};

type ConservationStatus = 'EX' | 'EW' | 'CR' | 'EN' | 'VU' | 'NT' | 'LC';
type KoppenClimate = |
	'Af' |'Am' | 'As' | 'Aw' |
	'BSh' | 'BSk' | 'BWh' | 'BWk' |
	'Cfa' | 'Cfb' | 'Cfc' | 'Csa' | 'Csb' | 'Csc' | 'Cwa' | 'Cwb' | 'Cwc' |
	'Dfa' | 'Dfb' | 'Dfc' | 'Dfd' | 'Dsa'| 'Dsb' | 'Dsc' | 'Dwa' | 'Dwb' | 'Dwc' | 'Dwd' |
	'EF' | 'ET';

const leopard: Animal = {
	commonName: 'Snow Leopard',
	genus: 'Panthera',
	species: 'Uncia',
	status: 'VU',                  // 취약종(vulnerable)
	climates: ['ET', 'EF', 'Dfd'], // 고산대(alpine) 또는 아고산대(subalpine)
};

🤔어떻게 이름을 정해야 할까?

  • 전문 용어, 해당 분야에 이미 존재하는 용어를 사용하자.
    • 코드로 표현하고자 하는 모든 분야에는 주제를 설명하기 위한 전문 용어들이 있다!
    • 자체적인 용어를 만들어 내려고 하지 말자!
    • 사용자와 소통에 유리하며 타입의 명확성을 올릴 수 있다.
    • 단, 전문 분야의 용어는 정확하게 사용해야 한다.

📜타입, 속성, 변수에 이름을 붙일 때 명심해야 할 규칙

  1. 동일한 의미를 나타날 때는 같은 용어를 사용해야 한다.
    • 동의어를 사용하면 헷갈린다.
    • 정말로 의미적으로 구분되어야 하는 경우에만 다른 용어를 사용해야 한다.
  2. 모호하고 의미 없는 이름은 피해야 한다.
    • 예시) data, info, thing, item, object, entity
    • 엄청 남발했는데.. 반성 중입니다😓
  3. 포함된 내용이나 계산 방식이 아닌 데이터 자체가 무엇인지 고려해야 한다.
    • 예시) INodeList 보다는 Directory가 더 의미 있는 이름

⇒ 좋은 이름은 추상화의 수준을 높이고 의도치 않은 충돌의 위험성을 줄여준다.

💡결론

  • 가독성을 높이고, 추상화 수준을 올리기 위해 해당 분야의 용어를 사용해야 한다.
  • 같은 의미에 다른 이름을 붙이면 안된다.
  • 특별한 의미가 있을 때만 용어를 구분해야 한다.
profile
프론트엔드를 공부하고 있는 학생입니다🐌

1개의 댓글

멋지십니당!

답글 달기