Clean Code: 의미 있는 이름

jiffydev·2021년 5월 27일
1

Clean Code

목록 보기
1/13

이름을 잘 짓기 위한 규칙

1. 의도가 분명하도록

변수, 함수, 클래스 이름은 다음과 같은 질문에 답할 수 있어야 한다.

존재 이유
수행하는 기능
사용 방법

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

//GOOD
int elapsedTimeInDays;

의도가 명시적으로 드러나는 이름을 사용하면 코드를 이해하기 쉽다.

2. 그릇된 정보를 주지 않도록

  • 널리 쓰이는 의미와 다른 의미로 이름을 사용하지 않는다.

  • 이름에 들어간 컨테이너와 실제 사용하는 컨테이너를 같게 한다.
    - 그냥 이름에 컨테이너 유형을 넣지 않는 것이 가장 바람직함

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

3. 의미있게 구분

이름을 구분해서 짓더라도 그것을 읽는 사람이 의도를 알지 못한다면 의미가 없다.

  • info, data와 같은 단어는 의미가 불분명하다. ProductInfoProduct가 어떻게 다른지 파악할 수 없다.

  • 연속적인 숫자만 의미없이 붙인 이름은 부적절하다. a1, a2, ...

4. 검색하기 쉬운 이름

숫자, 문자 하나를 사용하는 이름은 검색하기 어렵다.
한 문자를 사용하는 경우는 간단한 메서드에서 생성되는 로컬 변수정도이다.

5. 인코딩을 피하라

  • 헝가리식 표기법 (정의: https://en.wikipedia.org/wiki/Hungarian_notation)
    과거 컴파일러가 타입을 점검하지 않았을 때 개발자들이 타입을 확인할 수 있도록 만든 수단이었지만, IDE가 발전하면서 더이상 필요 없어진 방식.

6. 클래스, 메서드 이름

  • 클래스
    명사, 명사구를 사용한다. 다만 Manager, Processor, Data, Info등과 같은 모호한 단어는 피한다.

  • 메서드
    동사, 동사구를 사용한다. 접근자, 변경자, 조건자는 이름 앞에 get, set, is를 붙인다.
    getName(), setName(), isPosted() 처럼

7. 한 개념에 한 단어

추상적인 개념 하나에 한 단어를 선택해 이를 고수한다.
같은 기능을 하는 메서드임에도 클래스마다 fetch, retrieve, get으로 다르면 메서드를 찾을 때마다 기억에 의존해야 한다.

다만 비슷한 기능이라도 맥락이 다르다면 반드시 다른 단어를 사용해야 한다.
예를 들어 add 메서드는 모두 기존 값 두 개를 더하거나 이어서 새로운 값을 만드는데, 새로 구현한 메서드는 집합에 값 하나를 추가한다면 insert, append 등의 다른 단어를 사용하도록 한다.

8. 의미 있는 맥락 추가

스스로 의미를 갖는 이름도 있지만 그렇지 않을 경우 클래스, 함수, 이름 공간에 넣어 맥락을 부여한다.
예를 들어 변수 name, street, houseNumber, city, state, zipcode가 있다. 변수를 쭉 보다 보면 이것이 주소라는 사실을 알 수 있다. 하지만 state 하나를 떼어 놓고 보면 이것이 주소와 관련되어 있다는 것을 알기는 힘들다.

따라서 Address라는 클래스를 생성하여 그 안에 변수를 넣으면 의미가 분명해질 것이다.

profile
잘 & 열심히 살고싶은 개발자

0개의 댓글