클린코드 스터디 - 002
2장 의미있는 이름
의도를 분명히 밝혀라
int d; // 경과 시간(단위: 날짜)
이름 d는 아무 의미도 드러나지 않는다. 경과 시간이나 날짜라는 느낌이 안 든다. 측정하려는 값과 단위를 표현하는 이름이 필요하다.
Int elapsedTimeInDays;
Int daysSinceCreation;
Int daySinceModification;
Int fileAgeInDays;
의도가 드러나는 이름을 사용하면 코드 이해와 변경이 쉬워진다.
그릇된 정보를 피하라
서로 흡사한 이름을 사용하지 않도록 주의한다.
의미 있게 구분하라
컴파일러를 통과할지라도 연속된 숫자(a1, a2, … , aN)를 덧붙이거나 불용어(ProductInfo, ProductData)를 추가하는 방식은 적절하지 못하다. 이름이 달라야 한다면 의미도 달라져야 한다.
발음하기 쉬운 이름을 사용하라
검색하기 쉬운 이름을 사용하라
문자 하나를 사용하는 이름과 상수는 텍스트 코드에서 쉽게 눈에 띄지 않는다는 문제점이 있다. MAX_CLASSES_PER_STUDENT는 grep으로 찾기가 쉽지만, 숫자 7은 은근히 까다롭다. 7이 들어가는 파일 이름이나 수식이 모두 검색되기 때문이다. 검색은 되었지만, 7을 사용한 의도가 다른 경우도 있다. 상수가 여러 자리 숫자이고 누군가 상수 내 숫자 위치를 바꿨다면 문제는 더욱 심각해진다. 상수에 버그가 있으나 검색으로 찾아내지 못한다.
이런 관점에서 긴 이름이 짧은 이름보다 좋다. 검색하기 쉬운 이름이 상수보다 좋다.
이름 길이는 범위크기에 비례해야 한다. 변수나 상수를 코드 여러곳에서 사용한다면 검색하기 쉬운 이름이 바람직하다.
인코딩을 피하라
헝가리언, 이름에 타입같은 불필요한 정보를 등록하는 것
자신의 기억력을 자랑하지 마라
전문가 프로그래머는 자신의 능력을 좋은 방향으로 사용해 남들이 이해하는 코드를 내놓는다.
클래스 이름
클래스 이름과 객체 이름은 명사나 명사구가 적합하다. Customer, WikiPage, Account 등이 좋은 예다. Manager, Processor, Data, Info 등과 같은 단어는 피하고, 동사는 사용하지 않는다.
메서드 이름
메서드 이름은 동사나 동사구가 적합하다. postPayment, deletePage, save 등이 좋은 예다. 접근자, 변경자, 조건자는 javabean 표준에 따라 값 앞에 get, set, is를 붙인다.
String name = employee.getName();
customer.setName(“mike”);
If (paycheck.isPosted())…
생성자를 중복정의할 때는 정적 팩토리 메서드를 사용한다. 메서드는 인수를 설명하는 이름을 사용한다. 예를들어 다음 두 예제를 살펴보자.
Complex fulcrumPoint = Complex.FromRealNumber(23.0);
위 코드가 아래 코드보다 좋다.
Complex fulcrumPoint = new Complex(23.0);
생성자 사용을 제한하려면 해당 생성자를 private로 선언한다.
기발한 이름은 피하라
재미난 이름보다 명료한 이름을 선택하라.
한 개념에 한 단어를 사용하라
말장난을 하지 마라
한 단어를 두가지 목적으로 사용하지 마라. 다른 개념에 같은 단어를 사용한다면 그것은 말장난에 불과하다.
해법영역에서 가져온 이름을 사용하라
=> 기술 영역 코드를 읽을 사람도 프로그래머라는 사실을 명심한다. 그러므로 전산용어, 알고리즘 이름, 패턴 이름, 수학 용어 등을 사용해도 괜찮다. 프로그래머에게 익숙한 기술개념은 아주 많다. 기술 개념에는 기술 이름이 가장 적합한 선택이다.
문제영역에서 가져온 이름을 사용하라
=> 도메인 영역 적적한 ‘프로그래머 용어’가 없다면 문제 영역에서 이름을 가져온다. 그러면 코드를 보수하는 프로그래머가 분양 전문가에게 의미를 물어 파악할 수 있다. 문제 영역 개념과 관련이 깊은 코드라면 문제 영역에서 이름을 가져와야 한다.
의미 있는 맥락을 추가하라
예를 들어, firstName, lastName, street, city, state, zipcode라는 변수가 있다면 이들이 주소를 표현함을 금방 알아챌 수 있습니다. 하지만 어느 메서드가 state 변수 하나만 사용한다면 주소 일부라는 걸 쉽게 알아차리지 못합니다. 따라서 addr라는 접두어를 추가해 addrState라 쓰거나, Address라는 클래스에 속하도록 수정 해주는 것이 좋습니다.
불필요한 맥락을 없애라
일반적으로는 짧은 이름이 긴 이름보다 좋다. 단, 의미가 분명한 경우에 한해서다. 이름에 불필요한 맥락을 추가하지 않도록 주의한다. accountAddress와 customerAddress는 Adress 클래스 인스턴스로는 좋은 이름이나 클래스 이름으로는 적합하지 못하다. Address는 클래스 이름으로 적합하다.