2장. 의미 있는 이름


의도를 분명히 밝혀라

  • 변수(함수, 클래스)의 존재 이유는?

  • 수행 기능은?

  • 사용 방법은?

int d;

int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;
public List<int[]> getThem() {
	List<int[]> list1 = new ArrayList<>();
	for(int[] x : theList) { // theList?
		if(x[0] == 4) // 0? 4?
			list1.add(x);
	return list1;
}

public List<Cell> getFlaggedCells() {
	List<Cell> flaggedCells = new ArrayList<>();
	for(Cell cell : gameBoard) {
		if(cell.isFlagged())
			flaggedCells.add(cell);
	return flaggedCells;
}

그릇된 정보를 피하라

  • 예약어 사용 X ⇒ accountList, accountGroup, bunchOfAccounts 대신 Accounts

  • 비슷한 이름 사용 X

  • l, O 사용 X

의미 있게 구분하라

  • 추가해도 의미는 변하지 않는 단어를 추가 X

    • Product클래스가 이미 있다고 ProductInfo, ProductData클래스를 만들지 말자

    public static void copyChars(char[] a1, char[] a2) {
    	for(int i=0; i<a1.length; i++) {
    		a2[i] = a1[i];
    	}
    }
    
    public static void copyChars(char[] source, char[] destination) {
    	for(int i=0; i<source.length; i++) {
    		destination[i] = source[i];
    	}
    }

발음하기 쉬운 이름을 사용하라

검색하기 쉬운 이름을 사용하라

  • 한 글자 이름 X

  • 상수 ⇒ 상수 7을 사용하면 7을 포함하는 변수명, 파일명, 수식이 모두 검색된다

  • 이름 길이는 범위 크기에 비례해야 한다.

for(int j=0; j<34; j++) {
	s += (t[i]*4)/5;
}

int realDaysPerIdealDay = 4;
const int WORK_DAYS_PER_WEEK = 5;
int sum = 0;
for(int j=0; j< NUMBER_OF_TASKS; j++) {
	int realTaskDays = taskEstimate[j] * readDaysPerIdealDay;
	int realTaskWeeks = (realTaskDays / WORK_DAYS_PER_WEEK);
	sum += realTaskWeeks;
} 

인코딩을 피하라

  • 헝가리식 표기법, 멤버변수 접두어 X

  • 인터페이스 클래스와 구현 클래스

    • InterfaceName : InterfaceNameImpl

자신의 기억력을 자랑하지 마라

  • 문자 하나만을 사용하는 이름은 반복문에서 반복 횟수를 셀 때나 사용

  • 명료함을 위해

클래스 이름

  • 명사

  • noise word(Manager, Data, Info)와 동사는 피함

메서드 이름

  • 동사

  • get, set, is 활용

  • 생성자 오버로딩 할 때는 스태틱 메소드 활용하고 해당 생성자 private 선언

Complex fulcrumPoint = new Complex(23.0);

Complex fulcrumPoint = Complex.FromRealNumber(23.0);

기발한 이름은 피하라

한 개념에 한 단어를 사용하라

  • fetch, retrieve, get 중에서 하나만 사용

  • driver, controller, manager 중에서 하나만 사용

말장난을 하지 마라

  • add를 두 원소를 더하는 메소드 이름으로 사용 중인데

    집합에 값을 하나 추가하는 메소드도 add로 하진 말자

    • insert, append

해법 영역에서 가져온 이름을 사용하라

  • 모든 이름을 문제 영역에서 가져올 필요는 없다

  • 모두가 아는 용어, 알고리즘 이름, 패턴 이름, 수학 용어를 사용해도 된다

문제 영역에서 가져온 이름을 사용하라

  • 적절한 용어가 없가면 문제 영역에서 이름을 가져온다

의미 있는 맥락을 추가하라

  • 이름만으로는 의미가 부족할 수 있다.

    • 클래스, 함수, namespace를 활용

    • 접두어

    • street, houseNumber, city, state, zipcode 가 모두 있다면 주소라는 맥락을 알수 있지만 state 하나만 있다면 맥락을 알기 어렵다.

      • Address클래스에 담기, 접두어 addr 붙이기

불필요한 맥락을 없애라

  • 긴 이름 보다는 짧은 이름이 바람직하다.

  • AccountAddress, CustomerAddress는 클래스 이름보다는 인스턴스 이름으로 적절하고 Address라는 이름이 적절하다.

Last updated