도서

클린 코드 : 의미 있는 이름

스루나루 2024. 6. 29. 13:57
728x90
728x90

 

 

의미 있는 이름 

 

의도를 분명히 밝혀라 

- 존재 이유, 수행 기능 , 사용 방법 등 따로 주석을 달려고 하지말고 이름에 의도를 명확하게 표현할 수 있도록하자 

 

// 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;
}

 

- 게임판이라는 사실을 gameBoard라는 걸 통해 알 수 있고 각 판에 상태를 통해 깃발이 꽂힐 칸을 넣어주는 역할임을 이름을 명확하게 함으로써 가독성이 좋아졌다 

 

그릇된 정보를 피하라 

- 특정 도메인 약어를 사용하여 다른 사람들을 헷갈리게 하지마라 

 

의미 있게 구분하라 

- 이름을 지을 때 막 줄이는 것 보단 발음하기 편하게 짓는게 더 낫다

- gt 보다 generationTimestamp가 발음하기도 쉽게 다른 사람에게 이해시키기도 쉽다 

 

클래스 이름 

- 명사나 명사구  / 동사는 x 

- Ex) Customer, WikiPage, Account, AddressParser 등등 

 

메서드 이름 

- 동사나 동사구 

- ex) postPayment, deletePage, save 등 

- get,set,is 를 접두사처럼 붙이는 것도 ㄱㅊ 

 

말장난을 하지마라 

- 기존에 사용했던 add의 개념이 기존값 더하는 거 였는데 새로 작성한 add가 집합에 값을 추가하는 경우 이는 기존의 코드와 다른 내용이기 때문에 add라는 메서드명을 사용하기 보다는 insert나 append를 사용하는 것이 타당하다 

 

의미 있는 맥락을 추가하라 

// Bad
private void printGuessStatistics(char candidate, int count) {
    String number;
    String verb;
    String pluralModifier;
    if (count == 0) {  
        number = "no";  
        verb = "are";  
        pluralModifier = "s";  
    }  else if (count == 1) {
        number = "1";  
        verb = "is";  
        pluralModifier = "";  
    }  else {
        number = Integer.toString(count);  
        verb = "are";  
        pluralModifier = "s";  
    }
    String guessMessage = String.format("There %s %s %s%s", verb, number, candidate, pluralModifier );

    print(guessMessage);
}

- 함수를 끝까지 읽어야 변수가 어떻게 사용되는지 알 수 있음 

- 메서드만 읽어서는 의미가 불분명하다 

 

// Good
public class GuessStatisticsMessage {
    private String number;
    private String verb;
    private String pluralModifier;

    public String make(char candidate, int count) {
        createPluralDependentMessageParts(count);
        return String.format("There %s %s %s%s", verb, number, candidate, pluralModifier );
    }

    private void createPluralDependentMessageParts(int count) {
        if (count == 0) {
            thereAreNoLetters();
        } else if (count == 1) {
            thereIsOneLetter();
        } else {
            thereAreManyLetters(count);
        }
    }

    private void thereAreManyLetters(int count) {
        number = Integer.toString(count);
        verb = "are";
        pluralModifier = "s";
    }

    private void thereIsOneLetter() {
        number = "1";
        verb = "is";
        pluralModifier = "";
    }

    private void thereAreNoLetters() {
        number = "no";
        verb = "are";
        pluralModifier = "s";
    }
}

- 세 변수의 맹략을 분명하게 쪼개서 맥락을 분명히함 

 

 

 

참고

https://product.kyobobook.co.kr/detail/S000001032980

 

Clean Code(클린 코드) | 로버트 C. 마틴 - 교보문고

Clean Code(클린 코드) | 프로그래머, 소프트웨어 공학도, 프로젝트 관리자, 팀 리더, 시스템 분석가에게 도움이 될 더 나은 코드를 만드는 책『Clean Code(클린 코드)』은 오브젝트 멘토(Object Mentor)의

product.kyobobook.co.kr

 

 

728x90
728x90