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

이정우·2021년 7월 9일
0

Clean Code

목록 보기
2/10

📌 의도 밝히기

  • 변수, 함수, 클래스가 무엇을 수행하는지 이름에서 명확하게 드러내야 한다.
    이는 이름만 고치더라도 코드의 의미를 파악하는 것이 훨씬 쉬워지기 때문이다.

🎈 예시 1 : 측정하려는 값과 단위를 표현하는 이름을 사용

int d; // 경과 시간(날짜)

int daysSinceCreation;

🎈 예시 2 : 코드가 무엇을 수행하는지 정보를 충분히 제공

// 코드가 무슨 일을 하는지 알 수 없음
public List<int []> getThem(){
    List<int []> list1 = new ArrayList<>();
    for(int []x : theList){
        if(x[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;
}

📌 그릇된 정보 피하기

  • 다른 의미로 사용되는 단어를 변수의 이름으로 사용하면 혼동의 여지가 생길 수 있다.

  • 해당 자료구조로 만들어진 것이 아닌 경우, 이름에 사용하지 않는다.

    • List 자료 구조로 만들어지지 않은 경우, userList라고 이름을 붙이면 잘못된 정보를 제공할 수 있다.
  • 비슷한 이름을 사용하지 않는다.

  • 유사한 개념은 유사한 표기법을 사용한다.

    • 일관성을 유지한다.
  • 소문자 L과 숫자 1, 대문자 O와 숫자 0 등 혼동을 줄 수 있는 문자를 같이 사용하지 말자.


📌 의미 있게 구분하기

  • 컴파일 성공만을 목적으로 코딩하면 이후 코드 수정 시, 에러가 발생할 확률이 높아질 수 있다.

    • a1, a2, a3, … 등 의미 없는 숫자를 붙이는 것을 자제하자.
  • 불용어(Stop word)의 사용을 자제하자.

    • userInfo와 userData라는 클래스가 각각 있다고 생각해보자. 두 개의 차이가 뭔지 구분할 수 있을까?
    • nameString과 같이 변수의 타입을 적을 필요가 있을까? name을 표현하기 위해 다른 자료형을 사용하지 않을텐데..

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

  • 단어의 의미를 함축하기 위해 각 단어의 앞 글자를 따와서 이름을 짓기보다는 발음할 수 있는 이름을 만들자.
    • genymdhms(GENerate Year Month Date Hour Minute Second)는 어떻게 읽을까?
    • generationTimeStamp와 같이 읽을 수 있는 단어로 표현한다면 가독성이 높아질 것이다.

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

  • 상수와 문자 하나로 이루어진 변수는 검색이 매우 어렵다.
    • s라는 이름보다는 sum을 사용하면 검색이 더 쉬울 것이다.
    • #define, final 등의 키워드를 사용하여 상수를 정의하자.

📌 인코딩을 줄이기

  • 데이터 타입, 멤버 변수 명시 X
  • I 접두어보다는 Impl 접미어 사용

📌 클래스 & 메소드

  • 클래스는 명사나 명사구
  • 메소드는 동사나 동사구

📌 한 개념에 한 단어 사용

  • controller, manager, driver 등과 같이 비슷한 뜻을 지닌 단어는 하나로 통일하자.
  • 같은 단어를 여러 뜻으로 사용하지 말자.

0개의 댓글