자바/클린 코드

클린코드 - 2장 의미있는 이름

끄적끄적 2022. 4. 20. 20:52

의도를 분명히 밝혀라
변수의 존재 이유, 기능, 사용법 등이 변수, 메소드, 클래스명에 드러나야 한다. 따로 주석이 필요하지 않을 정도로

// Bad
public List<int[]> getThem() {
    List<int[]> list1 = new ArrayList<int[]>();
    for (int[] x : theList) {
        if (x[0] == 4) {
            list1.add(x);
        }
    }
    return list1;
}
// Good
public List<int[]> getFlaggedCells() {
    List<int[]> flaggedCells = new ArrayList<int[]>();
    for (int[] cell : gameBoard) {
        if (cell[STATUS_VALUE] == FLAGGED) {
            flaggedCells.add(cell);
        }
    }
    return flaggedCells;
}

 

그릇된 정보를 피하라
List가 아닌데, 메소드명이 getUserList이면 보는 사람이 혼란스럽다

public User getUserList(String email){
	return userRepository.findByEmail(email);
}

 

의미있게 구분하라
User, UserDetail, UserInfo, UserDetailInfo, UserData, UserDetailData 등과 같이 클래스를 명명하면 어떤 차이가 있는지 구분이 어렵다.
getActiveAccount(), getActiveAccounts(), getActiveAccountInfo() 등과 같이 유사한 이름도 어떤걸 호출해야 할지 알기 어렵다.

검색하기 쉬운 이름을 사용하라.
list, day, product, prdt, prd, p 등과 같이 이름을 사용하면, IDE에서 검색시 비슷한 게 너무 많이 나온다.

인코딩을 피하라
예전 처럼 변수명 앞에 타입(int, long, string 등)을 구분하는 접두어를 붙일 필요가 없다. 
인터페이스 앞에도 굳이 I 등을 붙일 필요가 없다.

클래스 이름, 메소드 이름
클래스 이름은 명사나 명사구 : User, Payment, Customer  (cf Manager, Data, Info 등 범용어는 피하자)
메서드 이름은 동사나 동사구 : getName(), setName, postPayment(), isPosted()


한 개념에 한 단어를 사용하라
User, Member, Customer 와 같이 비슷한 단어를 사용하면 혼동스럽다.

말 장난을 하지 마라
한 단어를 두가지 목적으로 사용하지 마라. add라는 이름을 더하는 목적이 아닌 집합에 값을 추가할때 쓰면 곤란하다.
그럴때는 insert나 append라는 이름을 쓰는게 적절할 것이다.

해법 영역에서 가져온 이름을 사용하라
전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등 잘 알려진 단어는 사용해도 좋다.

의미 있는 맥락을 추가하라
해당 변수 등의 이름이 맥락 상 이해가 어려울 수 있으면 접두어 등을 넣어서 의미를 이해할 수 있도록 하라.

불필요한 맥락을 없애라.
프로젝트 내에 모든 클래스에 GSD(Gas Station Deluxe) 등의 용어를 붙이는 것은 불필요하다. IDE에서 검색시에도 좋지않다.
일반적으로 짧은 이름이 긴 이름보다 좋다. 단, 의미가 분명한 경우에 한해서다.

 

 

반응형