코딩을 하다 보면 변수, 함수, 클래스, 패키지 등 다양한 요소에 이름을 붙여야 할 상황이 빈번히 발생한다. 사실, 이름을 잘 지어주는 것만으로도 코드의 가독성과 유지 보수성이 크게 향상되곤 한다.

< 의도를 노출하는 이름 선택하기 >

이름을 지을 때 핵심은 '의도를 명확하게 표현'하는 것이다. 그럼 이게 무슨 말인지 예시를 통해 살펴보자.

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

 

위의 코드에서 'd'라는 이름은 경과 시간을 의미한다는 것을 전혀 알려주지 않는다. 따라서 아래처럼 이름을 수정하면 더 좋을 것이다.

int elapsedTimeInDays;

 

이렇게 이름을 바꾸면 해당 변수가 어떤 정보를 담고 있는지 한 눈에 알 수 있게 된다.

< 예제로 보는 이름의 중요성 >

아래와 같은 함수가 있다고 가정해보자.

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

 

이 함수의 코드는 단순하지만 그 의도를 알기 어렵다. 이름이 그다지 도움이 되지 않기 때문이다.

만약 이 코드가 지뢰찾기 게임의 일부라고 하면, theList는 게임 판을 의미하고, x[0] == 4는 깃발이 표시된 셀을 찾는 것을 의미하게 된다. 이런 의도를 이름에 반영하면 아래처럼 코드를 개선할 수 있다.

public List<int[]> getFlaggedCells() {
    List<int[]> flaggedCells = new ArrayList<int[]>();
    for(int[] cell : gameBoard)
        if (cell[STATUS_VALUE] == FLAGGED)
            flaggedCells.add(cell);
    return flaggedCells;
}


이처럼 이름만 바꾸어도 코드가 무엇을 하는지 이해하기 훨씬 쉬워진다. 심지어, Cell이라는 클래스를 만들어 isFlagged()라는 메서드를 사용하면 더욱 명확해진다.

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

단순히 이름만 고쳤는데도 함수가 하는 일을 이해하기 쉬워졌다. 바로 이것이 좋은 이름이 주는 위력이라고 볼 수 있다.

 

 

출처 : 출판사 인사이트북 / 클린 코드 / https://product.kyobobook.co.kr/detail/S000001032980

※저의 블로그에 있는 모든 참고 서적,강의 내용은 출판사,저자(혹은 편집자)에게 허락을 직접 맡고, 게시하는 글 입니다.

 

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

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

product.kyobobook.co.kr

 

+ Recent posts