[Clean Code] 2. 의미 있는 이름
이 포스팅은 <Clean Code>, 로버트 C. 마틴, 인사이트(2013)을 읽고 개인 학습용으로 정리한 글입니다.
의도를 분명히 밝혀라
- 변수(or 함수 or 클래스)의 존재 이유, 수행 기능, 사용 방법
- 주석이 필요하다면, 의도가 분명히 드러나지 않은 것
그릇된 정보를 피하라
- 여러 계정을 그룹으로 묶을 때, 실제 List가 아니라면, accountList라 명명하지 않는다
-> accountGroup, accounts 등으로 명명
의미있게 구분하라
- a1,a2,a3 -> 아무런 정보를 제공하지 못하는 이름
발음하기 쉬운 이름을 사용하라
- ex.genymdhms -> generationTimeStamp
검색하기 쉬운 이름을 사용하라
- 검색하기 쉬운 이름이 상수보다 좋다
- 긴 이름이 짧은 이름보다 좋다
- 이름 길이는 범위 길이에 비례해야한다
- 여러 곳에서 사용될 수록, 검색하기 쉬워야한다
인코딩을 피하라
- 변수 이름에 타입을 인코딩할 필요 X
-> 이름이나 타입을 바꾸기 어려워진다
- 멤버 변수에 접두어 m_을 붙일 필요 X
- 인터페이스 클래스에 접두어를 붙이지 X
-> 사용자에게 과도한 정보 제공
-> 차라리 구현 클래스에 접두어를 붙이는 것이 낫다
(ex. IFactory, Factory 보다 Factory, CFactory 또는 Factory, FactoryImpl이 낫다)
자신의 기억력을 자랑하지 마라
- 문자 하나만 사용하는 변수 이름 X
(예외: 루프에서 반복문을 세는 i, j, k)
클래스 이름
- 명사 또는 명사구, 동사 X
- Manager, Processor, Data, Info 등의 단어는 피하라
메서드 이름
- 동사 또는 동사구
- javabean 표준
- 접근자 앞에는 get 붙이기
- 변경자 앞에는 set 붙이기
- 조건자 앞에는 is 붙이기
- 생성자 overload 할 때는 정적 팩토리 메서드 사용
- 정적 팩토리 메서드 이름: 인수를 설명하는 이름
- 정적 팩토리 메서드 패턴:
객체를 인스턴스화할 때, 직접적으로 생성자를 호출하지 않고, 객체 생성 역할을 하는 클래스 메서드 호출을 통해 객체 생성을 유도하는 패턴
- GoF의 Factory Method 패턴, Abstract Factory 패턴에서 팩토리 개념을 따와 심플하게 변형시킨 패턴
class Book {
private String title;
private Book(String title) { this.title = title; }
public static Book titleOf(String title) {
return new Book(title);
}
}
public static void main(String[] args) {
Book book1 = Book.titleOf("어린왕자");
}
한 개념에 한 단어를 사용하라
- 추상적인 개념 하나에 단어 하나를 선택해 사용
- ex. get, fetch, retrieve, ... 중 하나 선택
- ex. controller, manager, driver, ... 중 하나 선택
해법 영역에서 가져온 이름을 사용하라
- 전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등 사용 O
의미있는 맥락을 추가하라
- ex. 주소를 나타내는 변수들 state, city, street, zipcode
-> 맥락 없이 보면, state 변수가 상태 변수인지 주소 변수인지 알기 어렵다
- 대안(1) 접두어 붙이기 addrState, addrCity, addrStreet, addrZipcode
- 대안(2) 해당 변수들을 포함하는 Adress 클래스 생성하기
불필요한 맥락을 없애라
- 의미가 분명한 경우에는, 불필요한 맥락 추가 X