본문 바로가기
Java/Clean Code

[클린코드(CleanCode)] 2장. 의미있는 이름

by 잭피 2020. 9. 4.

의도를 분명히 밝혀라

변수, 함수 등에 좋은 이름을 지어주자

그릇된 정보를 피하라

나름 널리 쓰이는 의미가 있는 다른 단어를 다른 의미로 사용하거나,서로 흡사한 이름을 사용하지 마라

String accountList (x) 
String XYZTestHandleStrings (x)
String XYZTestStorageStrings (x)

 

의미 있게 구분하라

  • 변수이름을 a1,a2 (x) - source, destination 처럼 의미있는 이름으로

  • 불용어를 쓰지말자

    불용어 : 인터넷 검색 시 검색 용어로 사용하지 않는 단어. 관사, 전치사, 조사, 접속사 등은 검색 색인 단어로 의미가 없는 단어

    • Info, Data 또한 a, an, the처럼 의미가 불분명한 불용어

      moneyAmount/money, customerInfo/cunstomer, accountData/account, theMessage/message

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

이름 길이는 범위 크기에 비례해야 한다

변수나 상수를 코드 여러 곳에서 사용한다면 검색하기 쉬운 이름이 바람직하다

int realDaysPerDay = 4;

인코딩을 피하라

  • 헝가리식 표기법

    헝가리 표기법이란, 변수 이름을 정할 때 이름만으로도 변수 타입을 짐작할 수 있도록 접두사(Prefix)를 덧붙이는 방법을 말한다. 예를 들면 word라는 이름의 변수는 첫 글자인 w만으로 핸들 타입이라는 것을 알 수 있다

    요즘은 변수 이름에 타입을 인코딩할 필요가 없음, IDE는 컴파일을 하지 않고도 타입 오류를 감지할 수 있음

    따라서 이젠 헝가리식 표기법이나 기타 인코딩 방식이 오히려 방해가 됨

  • 멤버 변수 접두어

    멤버 변수에 m_ 접두어를 붙일 필요도 없음

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

    때로는 인코딩이 필요한 경우도 있음

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

    (Interface) ShapeFacotry ↔ ShapeFactoryImp, CShapeFactory 

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

일반적으로 문제 영역이나 해법 영역에서 사용하지 않는 이름을 선택?!

전문가 프로그래머는 명료함이 최고라는 사실을 이해하고, 자신의 능력을 좋은 방향으로 사용해 남들이 이해하는 코드를 내놓음

클래스 이름

명사나 명사구가 적합

(OK) Customer, Account, AddressParser

Manager, Processor, Data, Info 같은 단어는 피하고, 동사도 사용하지 않음

메서드 이름

동사나 동사구가 적합

(OK) save, deletePage

접근자, 변경자, 조건자는 get, set, is를 붙이자

생성자를 중복정의 할 땐, 정적 팩터리 메소드를 사용 (메서드는 인수를 설명하는 이름)

Complex point = Complex.FromRealNumber(23.0) (o)
Complex point = new Complex(23.0) (x)

기발한 이름은 피하라

농담은 피하고 의도를 분명히 하라

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

메서드 이름은 독자적이고 일관적이어야 함

동일 코드 기반에 controller, manager, driver를 섞어 쓰면 혼란스럽다

DeviceManager vs ProtocolController ?

→ 당연히 독자는 클래스도 다르고 타입도 다르리라 생각하게됨

말장난을 하지마라

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

예를 들면 add라는 메서드가 기존 값 두 개를 더하거나 이어서 새로운 값을 만든다고 가정

새로 작성하는 메서드는 집합에 값 하나를 추가 → add? (x), insert나 append(o)

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

전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어를 사용해도 괜찮음

JobQueue (o)

기술 개념에는 기술 이름이 가장 적합한 선택

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

적절한 프로그래머 용어가 없다면 문제 영역에서 이름을 가져옴

의미 있는 맥락을 추가하라

클래스, 함수, 이름 공간에 넣어 맥락을 부여 → 접두어

불필요한 맥락을 없애라

GSD 회계 모듈에 GSDAccountAddress 클래스가 존재하며 고객 주소가 필요하면 GSDCustomerAddress ?

일반적으로 짧은 이름이 긴 이름보다 좋음 (단, 의미가 분명해야함)

accountAddress, customerAdderss는 Address 클래스 인스턴스로 적합하지 클래스 이름으로는 적합하지 않음

포트 주소, MAC 주소, 웹 주소로 구분해야한다면, PostalAddress, MAC, URI라는 이름도 괜찮을듯?

 

 

이 글은 “클린코드” 책 내용을 정리한 글입니다.

만약 저작권 관련 문제가 있다면 “shk3029@kakao.com”로 메일을 보내주시면, 바로 삭제하도록 하겠습니다.

 

'Java > Clean Code' 카테고리의 다른 글

[클린코드(CleanCode)] 4장. 주석  (0) 2020.11.18
[클린코드(CleanCode)] 3장. 함수  (0) 2020.11.18

댓글