[2장] 의미 있는 이름

DAYEON·2021년 7월 5일
0

Clean Code

목록 보기
3/17
post-thumbnail

의도를 분명히 밝혀라

👏 정말 정말 중요!!! 의도가 분명한 이름은 정말 중요하다!

  • 좋은 이름 만들기에 들어가는 시간 < 절약되는 시간

  • 변수, 함수, 클래스 이름들이 답해야 할 굵직한 질문들
    👉 존재 이유 👉 수행 기능 👉 사용 방법

이름은 주석이 필요 없을 정도로!

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

코드가 하는 일을 짐작할 수 있도록!

코드의 단순성만이 아닌, 이제는 함축성까지 신경써보자. "코드 맥락"
👉 각 개념에 이름 붙이기
👉 int 배열 → 간단한 클래스
👉 상수 → 명시적인 함수로 상수 감싸기

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

그릇된 정보를 피하라

그릇된 단서는 코드의 의미를 흐린다.

  • 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용 X
    🤷‍♀️ 직각삼각형의 빗변을 구현할 때, hp를 사용하면 안될까요?
    hp, aix, sco는 유닉스 플랫폼이나 유닉스 변종을 가리킴
    유닉스 : 운영체제의 이름
    🤷‍♀️ 여러 계정을 그룹으로 묶을 때, accountList라는 이름은요?
    ❌ 프로그래머에게 List라는 단어는 특수한 의미. 실제 List만!!!

  • 흡사한 이름을 사용하지 않도록 주의
    🙄...? XYZForEfficientHandingOfStrings XYZControllerForEfficientStorageOfStrings

  • 유사한 개념은 유사한 표기법을 사용
    #핫키 조합 #후보목록

  • 소문자 L대문자 O 사용 자제 or 작성자가 글꼴을 바꿔 차이 확인
    l vs 1
    O vs 0


의미 있게 구분하라

  • 연속적인 숫자를 덧붙인 이름은 금지!

  • 불용어 사용, 주의할 점과 추천 방법!
    info Data 구분 불가능
    variable
    ❌ 표 이름 안에 table 금지
    NameString 이름이 문자열이 아닐 경우는 거의 없음 Name 사용
    ⭕ 모든 지역 변수는 a 모든 함수 인수는 the를 사용

  • 명확한 관례로 구분하자


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

  • 프로그래밍은 사회 활동. 발음하기 쉬운 이름을 사용
    실제로 회의하거나 설명하는 과정에서 방해가 되기 쉬움.

  • 발음하기 어려운 과도한 축약은 금지하자!!


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

특히나, 변수나 상수를 코드 여러 곳에서 사용한다면 더 고려하기!

  • 숫자 7, 문자 e는 자제
  • 검색의 관점에서는 짧은 이름보단 긴 이름
  • Tip. 간단한 메서드에서 로컬 변수만 한 문자를 사용 → 이름의 길이는 범위의 크기에 비례

인코딩을 피하라

문제 해결에 집중하는 개발자에게 인코딩은 불필요한 정식적 부담이다.
발음 문제, 오타 문제 발생 ↑

  • 헝가리식 표기법 자제
    변수를 선언하는 위치와 사용하는 위치가 멀지 않고, IDE는 컴파일 없이 타입 오류 검출이 가능하다. → 헝가리식 표기법과 기타 인코딩 방식은 더 방해가 됨

  • 멤버 변수 접두어
    멤버 변수 앞에 _m이라는 접두어 붙일 필요가 없다.
    클래스와 함수는 접두어가 필요 없을 정도로 작아야 마땅

  • 인터페이스 클래스와 구현 클래스
    인터페이스 이름에는 접두어를 붙이지 않는 편이 좋다.
    인터페이스 클래스 이름과 구현 클래스 이름 중 하나를 인코딩해야 한다면 구현 클래스 이름을 인코딩하자.


자신의 기억력을 자랑하지 마라

  • 명료함이 최고
  • 남들이 이해하는 코드

클래스 이름

  • 클래스 이름과 객체 이름은 명사메서드가 적합
  • ❌ : 동사, Manager, Processor, Data, Info

메서드 이름

  • 동사동사구가 적합
  • 생성자를 중복정의 할 때는 정적 팩토리 메서드 사용, 인수를 설명하는 이름 사용
    정적 팩토리 메서드란 :
    객체를 생성하는 역할을 분리하겠다는 취지가 담겨 있으며, 메서드를 통해 객체를 생성한다

기발한 이름은 피하라

  • 재미보단 명료하고 분명한 이름 사용

한 개념에 한 단어를 선택하라

  • 동일한 코드 기반에는 일관성있는 어휘 사용

해법 영역에서 가져온 이름을 사용하라

  • 문제 영역이 아닌 해법 영역에서 이름 가져오기
  • 기술 개념에서는 기술 이름으로
    전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어

문제 영역에서 가져온 이름을 사용하라

  • 단, 적절한 '프로그램 용어'가 없을 때
  • 또는 문제 영역의 개념과 관련이 깊을 때

😊 해법 영역과 문제 영역을 구분하는 능력을 가져라!


의미 있는 맥락을 추가하라

  • 의미 부여를 위한 수단 순서
    스스로 의미가 분명한 이름 → 클래스, 함수, 이름 공간에 넣어 맥락 부여 → 접두어

불필요한 맥락을 없애라

  • 의미가 분명한 경우, 짧은 이름이 긴 이름보다 좋음
  • 이름에 불필요한 맥락을 더할 필요는 없음

마치면서

  • 좋은 이름을 설명하려면 뛰어난 설명 능력, 같은 문화적 배경을 가져야 함 (어려움..😂)
  • 다른 사람이 짠 코드를 손본다면 리팩토링 도구 활용

인상 깊었던...

좋은 이름은 단기적인 효과는 물론 장기적인 이익도 보장한다.

여느 코드 개선 노력과 마찬가지로 이름 역시 나름대로 바꿨다가는 누군가 질책할지도 모른다. 그렇다고 코드를 개선하려는 노력을 중단해서는 안 된다.


profile
노력하는 초보 개발자

0개의 댓글