10. 이름 설계 - 구조를 파악할 수 있는 이름
내용
악마를 불러들이는 이름
흔히 볼 수 있는 좋지 않는 이름 설계는 상품을 그대로 '상품 클래스' 라고 이름 붙이는 것.
관심사 분리?
유스케이스, 목적, 역할에 따라 분리한다.
그냥 상품이 아니라..
예약 상품
주문 상품
재고 상품
발송 상품
이름 설계하기 - 목적 중심 이름 설계
이름을 붙이는 건 '설계'
설계란?
어떤 문제를 해결하기 위한 구조를 생각하거나 만들어 내는 것.
이름은 느슨한 결합, 응집도가 높은 구조를 만드는데 중요한 역할을 한다.
중요 포인트
최대한 구체적, 의미 좁게, 특화된 이름
존재가 아니라 목적 기반
어떤 관심사가 있는지 분석
소리 내어 읽어보고
이용 약관 읽어보고
다른 이름으로 대체할 수 없는지 검토해보고
결합이 느슨하고 응집도가 높은 구조인지 검토
최대한 구체적, 의미 좁게, 특화된 이름
클래스가 작아지고
관계된 클래스가 적으므로 결합도가 낮아지고,
관계된 클래스가 적으므로, 변경 시 영향범위가 좁음
개발 생산성 향상
존재가 아니라 목적 기반
bad -> 주소
good -> 발송지, 배송지
유비쿼터스 언어?
팀 전체에서 의도를 공유하기 위한 언어
결합이 느슨하고 응집도가 높은 구조인지 검토
여러 의미를 갖고 있다면 분해하자
관련된 클래스 개수가 적으면 적을 수록 느슨하고 응집도 있는 구조일 가능성이 높음
이름 설계 시 주의 사항
수식어를 붙여서 차이를 나타낸다면..
e.g. 이 플래그가 true인 User는 문제 있는 회원
각각을 클래스로 설계할 수 없는지 검토해보기.
의미를 알 수 없는 이름
놀람 최소화 원칙
예상하지 못한 놀라움을 최소화하도록 설계해야 한다.
구조에 악영향을 미치는 이름
~info, ~data는 데이만 갖는 클래스니까 로직을 구현하면 안되는 것 같은 느낌
DTO (Data Transfer Obejct)
단순 데이터 전송 용도면 괜찮다.
그런데 값을 변경하는 용도는 지양
Manager, Processor, Controller
여러 책무를 떠안기 쉬움.
이름을 봤을 때, 위치가 부자연스러운 클래스
Enemy 클래스의 관심사는 적
Enemy.addItemToParty
관심사가 다른 메서드는 '동사 + 목적어' 형태가 되는 경향이 있음
가능하면 메서드 이름은 동사 하나로 구성되게 하기
클래스 is 상태
This member is hungry -> good
Common is member in confusion -> bad
member is in confusion -> good
이름 축약
기본적으로 이름은 축약하지 말자
정리
책무가 다른 로직은 다른 클래스로 정의하자
이름은 '설계' 하는 것
목적을 생각하고, 사용하자
참고
https://product.kyobobook.co.kr/detail/S000202521361
Last updated
Was this helpful?