etc
[클린코드] 2장 의미 있는 이름
lim.dev
2023. 7. 12. 15:57
자주 헷갈리는 것은 표시해두었습니다.
- 의도를 분명히 밝혀라
- 그릇된 정보를 피하라
- 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용하면 안된다.
- 실제 List가 아니라면 List라고 쓰지 않는다.
(예시) 만약 유저 계정 리스트의 변수명을 짓는다면 accountGroup이나 bunchOfAccounts, 아니면 accounts가 낫다. - 서로 흡사한 이름을 쓰지 않도록 주의한다.
- 의미 있게 구분하라
- 연속된 숫자를 덧붙이거나 불용어를 추가하는 방식은 적절하지 못하다.
(예시) a1, a2 ,,,
(예시) 불용어
getActiveAccounts();
getActiveAccountInfo();
getActiveAccount();
→ 구분이 안됨
customerInfo는 customer와, accountData는 account와, theMessage는 message와 구분이 안됨. 읽는 사람이 차이를 알도록 이름을 지어야 함
- 연속된 숫자를 덧붙이거나 불용어를 추가하는 방식은 적절하지 못하다.
- 발음하기 쉬운 이름을 사용하라
- 검색하기 쉬운 이름을 사용하라
- 이름 길이는 범위 크기에 비례해야 한다.
- 인코딩을 피하라
- 헝가리식 표기법
과거에는 컴파일러가 타입을 점검하지 않아 프로그래머가 타입을 기억할 단서가 필요해서 phoneString처럼 선언했는데 지금은 오히려 방해가 될 뿐, 헝가리식이나 기타 인코딩은 필요없다. - 멤버 변수 접두어 m_
클래스와 함수는 접두어가 필요 없을 정도로 작아야 한다. 또한 멤버 변수를 다른 색상으로 표시하거나 눈에 띄게 보여주는 IDE를 사용해야 한다. - 인터페이스 클래스와 구현 클래스
(예시) 인터페이스 클래스는 ShapeFactory, 구현 클래스 이름은 ShapeFactoryImp
- 헝가리식 표기법
- 자신의 기억력을 자랑하지 마라
- 클래스 이름
- 클래스 이름과 객체 이름은 명사나 명사구가 적합
- Manager, Processor, Data, Info는 피하기
- Customer, WikiPage, Account, AddressParser 은 좋은 예
- 동사는 사용하지 않기
- 메서드 이름
- 동사나 동사구가 적합
(예시) postPayment, deletePage, save 등이 좋은 예 - 접근자, 변경자, 조건자는 javabean표준에 따라 값 앞에 get, set, is를 붙인다.
- 생성자를 중복정의 할 때는 정적 팩토리 메서드를 사용
- 메서드는 인수를 설명하는 이름을 사용
(예시) 아래쪽 코드가 위쪽 코드보다 좋다
- 동사나 동사구가 적합
Complex fulcrumPoint = new Complex(23.0);
Complex fulcrumPoint = Complex.FromRealNumber(23.0);
- 기발한 이름은 피하라
- 재미있는 이름보단 명료한 이름
- 특정 문화에서만 사용하는 농담이나 속어는 피하라
- 한 개념에 한 단어를 사용하라
- 추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다.
- (예시) Controller와 Manager = 하는 일은 같은데 다르게 불러서 헷갈림
- 말장난을 하지 마라
- 한 단어를 두 가지 목적으로 사용하지 마라
- (예시) 기존의 add 메서드는 모두 기존 값에 두 개를 더하거나 새로운 값을 만드는 거 였는데 추가할 메서드는 집합에 값 하나를 추가하는 것이다. 이때 추가할 메서드를 add라고 하는 것 보다 insert나 append가 적당하다.
- 해법 영역에서 가져온 이름을 사용하라
- 코드를 읽을 사람도 프로그래머이므로 전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등을 사용해도 좋다.
- (예시) AccountVisitor, JobQueue
- 문제 영역에서 가져온 이름을 사용하라
- 적절한 프로그래머 용어가 없다면 문제 영역에서 이름을 가져온다.
- 문제 영역과 해법 영역을 구분하여 문제 영역 개념과 관련이 깊은 코드라면 문제 영역에서 이름을 가져와야 한다.
- 의미 있는 맥락을 추가하라
- (예시) city, state, zipcode → addrCity, addrState, addrZipcode 또는 Address 클래스로 묶기
- 불필요한 맥락을 없애라
- 의미없이 변수 앞에 도메인 붙이지 않기
(예시) crepeAccount -> account
Address는 클래스이름으로 적합하고 accountAddress나 customerAddress는 클래스 인스턴스의 이름으로 적합하다.
- 의미없이 변수 앞에 도메인 붙이지 않기