대범하게

[클린코드] 5일차 - 분명한 이름을 위한 의미있는 맥락(Context) 부여, 함수는 한 가지 일만. 본문

알아두면쓸데있는신기한잡학사전/독서일지

[클린코드] 5일차 - 분명한 이름을 위한 의미있는 맥락(Context) 부여, 함수는 한 가지 일만.

대범하게 2023. 10. 29. 23:32
반응형

[클린코드] 5일차 - 분명한 이름을 위한 의미있는 맥락(Context) 부여, 함수는 한 가지 일만.

클린코드 5일차 (p. 35~38(2장) / 39~45(3장) )

2 의미 있는 이름

15. 의미있는 맥락을 추가하라

- 클래스, 함수, 이름 공간 등으로 감싸서 맥락을 부여.

// 맥락이 불문명한 변수 
// 함수 이름은 맥락의 일부만 제공하며, 알고리즘이 나머지 맥락을 제공.
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, cadidate, pluralModifier);
    print(guessMessage);
}
// 세 변수를 클래스에 넣음으로 맥락을 분명히. 세 변수를 함수 전반에서 사용.

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

 

16. 불필요한 맥락을 없애라

- 일반적으로 짧은 이름보다는 긴 이름이 좋다. 단, 의미가 분명한 경우에 한해서이다. 

 

1 의미있는 이름결론은..

- 좋은 이름을 선택하려면 설명 능력이 뛰어나야 하고 문화적인 배경이 같아야 한다.

- 사람들이 이름을 바꾸지 않으려는 이유 하나는 다른 개발자가 반대할까 두려워서다. 

- 그렇다고 코드를 개선하려는 노력을 중단해서는 안 된다. 

+ "의미있는 이름 짓는 시간은 유의미하다."

 

3 함수

- 어떤 프로그램이든 가장 기본적인 단위함수이다.

 

길이가 길고, 중복된 코드에, 괴상한 문자열에, 낯설고 모호한 자료 유형의 코드로 이루어진 함수는 이해하기에 많은 어려움이 따른다. 그렇다면 읽시 쉽고 이해하기 쉬운 함수는 어떻게 작성해야하는가?

 

1. 작게 만들어라!

- 함수를 만드는 첫번째 규칙은 '작게' ! / 두 번째 규칙은 '더 작게'!

- 블록과 들여쓰기

if 문의 블록 속 함수가 호출됨을 확인할 수 있다.

- if/else 문, while문 등에 들어가는 블록은 한 줄이어야 한다는 의미이다. 대개 거기서 함수를 호출한다.

- 바깥을 감싸는 함수가 작아질 뿐만 아니라, 블록 안에서 호출하는 함수 이름을 적절히 짓는다면, 코드 이해가 쉽다.

 

2. 한 가지만 해라!

 

함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야한다. 

 

- 함수를 만드는 이유는 큰 개념을 다음 추상화 수준에서 여러 단계로 나눠 수행하기 위해서이다.

- 함수가 '한 가지'만 하는지 판단하는 방법은 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 셈이다. 

Comments