Clean Code - 깨끗한 코드

종현·2023년 12월 19일
0

Clean Code

목록 보기
1/7

의미 있는 이름

의도를 분명히 밝혀라

  • 변수나 함수 클래스 이름은 다음과 같은 질문에 모두 답해야 한다.
  • 변수(혹은 함수나 클래스)의 존재 이유는?
  • 수행 기능은?
  • 사용 방법은?
  • 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다.
  • 의도가 드러나는 이름을 사용하면 코드 이해와 변경이 쉬워진다.

그릇된 정보를 피하라

  • 프로그래머는 코드에 그릇된 단서를 남겨서는 안 된다.
  • 나름대로 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용해도 안 된다.

의미 있게 구분하라

  • 연속된 숫자를 덧붙이거나 불용어(noise word)를 추가하는 방식은 적절하지 못하다.
  • 이름이 달라야 한다면 의미도 달라져야 한다.
  • 읽는 사람이 차이를 알도록 이름을 지어야 한다.

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

  • 발음하기 어려운 이름을 사용할 경우, 대화가 어려워진다.

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

인코딩을 피하라

- 헝가리식 표기법

- 멤버 변수 접두어

  • 클래스와 함수는 접두어가 필요없을 정도로 작아야 마땅하다.
  • 멤버 변수를 다른 색상으로 표시하거나 눈에 띄게 보여주는 IDE를 사용해야 마땅하다.

- 인터페이스 클래스와 구현 클래스

  • 인터페이스 이름은 접두어를 붙이지 않는 편이 좋다고 생각한다.
  • 접두어는 (잘해봤자) 주의를 흐트리고 (나쁘게는) 과도한 정보를 제공한다.

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

  • 변수 이름을 자신이 아는 이름으로 변환해야 한다면 그 변수 이름은 바람직하지 못하다.
  • 문자 하나만 사용하는 변수 이름은 문제가 있다. (루프문 i,j,k 제외)
  • 명료함이 최고

클래스 이름

  • 클래스 이름과 객체 이름은 명사나 명사구가 적합. (동사는 사용하지 않는다.)
    ex) Customer, WikiPage, Account, AddressParser 등.
    ex) Manager, Processor, Data, Info 등과 같은 단어는 피해야 함.

메서드 이름

  • 메서드 이름은 동사나 동사구가 적합
    ex) postPayment, deletePage, save 등

  • 접근자(Accessor), 변경자(Mutator), 조건자(Predicate)는 javabean 표준에 따라 값 앞에 get, set, is를 붙인다.

  • 생성자(Constructor)를 중복정의(Overload)할 때는 정적 팩토리 메서드를 사용한다.

  • 메서드는 인수를 설명한는 이름을 사용한다.

Complex fulcrumPoint = Complex.FromRealNumber(23.0);
Complex fulcrumPoint = new Complex(23.0);
  • 위 코드가 아래 코드보다 좋다.
  • 생성자 사용을 제한하려면 해당 생성자를 private로 선언한다.

기발한 이름은 피하라.

한 개념에 한 단어를 사용하라.

  • 추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다.
  • 메서드 이름은 독자적이고 일관적이어야 한다.

말장난을 하지 마라

  • 한 단어를 두 가지 목적으로 사용하지 마라.

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

  • 모든 이름을 문제 영역(domain)에서 가져오는 정책은 현명하지 못하다.
  • 같은 개념을 다른 이름으로 이해하던 동료들이 매번 고객에게 의미를 물어야하기 때문이다.

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

의미 있는 맥락을 추가하라

  • 스스로 의미가 분명한 이름이 없지 않다. 하지만 대다수 이름은 그렇지 못하다.
  • 그래서 클래스, 함수, 이름 공간에 넣어 맥락을 부여한다.
  • 모든 방법이 실패하면 마지막 수단으로 접두어를 붙인다.

ex) firstName, lastName, street, houseNumber, city, state, zipcode 라는 변수가 있어 변수를 훑어보면 주소라는 사실을 알아챌 수 있다.
하지만 어느 메서드가 state라는 변수 하나만 사용한다면?
=> addr이라는 접두어를 추가하면 맥락이 좀 더 분명해진다.
물론 Address라는 클래스를 생성하면 더 좋다.

불필요한 맥락을 없애라

  • 고급 휘발유 충전소(Gas Station Deluxe)라는 애플리케이션을 짠다고 할 때, 모든 클래스 이름을 GSD로 시작하겠다는 생각은 전혀 바람직 하지 못하다.
  • 일반적으로 짧은 이름이 긴 이름보다 좋다. (단, 의미가 분명한 경우에 한해서다.)
  • 이름에 불필요한 맥락을 추가하지 않도록 주의한다.

이상

0개의 댓글