글모음

[독서] - Clean code / 2장 의미 있는 이름 본문

프로그래밍 공부/기타

[독서] - Clean code / 2장 의미 있는 이름

Nova_61 2022. 4. 25. 00:41
728x90
반응형

2장 

의미 있는 이름


< 기억하고 싶은 내용 >


[ 의도를 분명히 밝혀라 ]

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

 

[ 그릇된 정보를 피하라 ]

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

- 나름대로 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용해도 안 된다.

- 서로 흡사한 이름을 사용하지 않도록 주의

- 소문자 L이나(숫자 1과 혼동), 대문자 O(숫자 0과 혼동)도 주의해야한다.

 

[ 의미 있게 구분하라 ]

명확한 관례가 없다면 변수 moneyAmount는 oney와 구분이 안 된다.

customerInfo는 customer와, accountData는 account와, the Message는 message와 구분이 안 된다.

읽는 사람이 차이를 알도록 이름을 지어라.

 

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

발음하기 어려운 이름은 토론하기도 어렵다.

 

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

 

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

똑똑한 프로그래머와 전문가 프로그래머 사이에서 나타나는 차이점 하나만 들자면,

전문가 프로그래머는 명료함이 최고라는 사실을 이해한다.

전문가 프로그래머는 자신의 능력을 좋은 방향으로 사용해 남들이 이해하는 코드를 내놓는다.

 

[ 클래스 이름 ]

클래스 이름과 객체 이름은 명사나 명사구가 적합하다. 

Customer, WikiPage,Account, AddressParser 등이 좋은 예다.

Manager, Processor, Data, Info 등과 같은 단어는 피하고, 동사는 사용하지 않는다.

 

[ 메서드 이름 ]

메서드 이름은 동사나 동사구가 적합하다.

postPayment, deletePage, save 등이 좋은 예다. 

 

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

추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다.

예를 들어, 똑같은 메서드를 클래스마다 fetch, retrieve, get으로 제각각 부르면 혼란스럽다. 

 

동일 코드 기반에 controller, manager, driver를 섞어 쓰면 혼란스럽다. DeviceManager와 ProtocolController는 근본적으로 어떻게 다른가? 어째서 둘 다 Controller가 아닌가? 어째서 둘 다 Manager가 아닌가? 정말 둘 다 Driver가 아닌가?

이름이 다르면 독자는 당연히 클래스도 다르고 타입도 다르리라 생각한다.

 

[ 불필요한 맥락을 없애라 ]

일반적으로 짧은 이름이 긴 이름보다 좋다.

단, 의미가 분명한 경우에 한해서다. 이름에 불필요한 맥락을 추가하지 않도록 주의한다. 


< 내 생각 >

이름 짓기의 중요성을 느낀건 대학교 때 <데이터베이스 설계> 라는 과목을 들으면서였다. 담당 교수님은 데이터베이스 설계쪽으로 아주 자부심이 있으신 분이였고, 수업도 학기 내내 요구사항 명세서를 보며 직접 데이터베이스를 설계하는 식으로 이루어졌다.

 쇼핑몰의 데이터베이스 설계를 했는데, 테이블, 테이블 간의 관계 등을 하나하나 구체화하고, 머리를 싸매고 다음주에 교수님의 피드백을 받고 고치는 형식이였다.

 명확성을 위해서 테이블도 진짜 잘게 쪼개고, 기능도 잘게 쪼개고, 이름도 잘게 쪼개야했다.

의미가 명확하지 않아서 적절한 이름을 짓는데도 고민을 많이 해야해서 영어 사전을 뒤지며 고민하며 이게 영어 수업인지, DB 수업인지 헷갈렸던 기억이 난다. 그래도 마지막에 설계한 데이터베이스와 처음 만든 DB 테이블들을 봤을 때 확실히 의미도 정확하고 이해하기도 편했다. 

728x90
반응형
Comments