[Clean Code 시리즈 포스팅]
[Clean Code] 1장. 깨끗한 코드: Clean Code
[Clean Code] 2장. 의미 있는 이름 : Meaningful Names (Now)
[Clean Code] 3장. 함수 : Functions
[Clean Code] 4장. 주석 : Comments
[Clean Code] 5장. 형식 맞추기 : Formatting
[Clean Code] 6장. 객체와 자료구조 : Objects and Data Structures
[Clean Code] 9장. 단위 테스트 : Unit Tests
❑ 의도를 분명히 밝혀라
- 의도가 분명한 이름은 정말로 중요하다. 좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다.
- 프로그래머는 코드를 최대한 이해하기 쉽게 짜야 한다. 집중적인 탐구가 필요한 코드가 아니라 대충 훑어봐도 이해할 코드 작성이 목표다.
- 변수나 함수 그리고 클래스 이름은 다음과 같은 굵직한 질문에 모두 답해야한다.
★ 변수(혹은 함수나 클래스)의 [존재 이유 / 수행 기능 / 사용 방법] 은?
★ 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다.
❑ 의미 있게 구분하라
- 연속된 숫자를 붙인 이름(a1, a2, ..., aN)은 의도적인 이름과 정반대다
- Info, Data, a, an, the 등은 의미가 불분명한 noise word다. 예를 들어, ProductInfo와 ProductData는 개념을 구분하지 않은 채 이름만 달리한 경우다.
❑ 검색하기 쉬운 이름을 사용하라
- 예를 들어 "e"라는 이름의 변수를 지었을 때 해당 변수를 찾기 위해 "e"를 검색한다면 e를 포함한 수없이 많은 코드가 검색될 것이다.
- 이런 관점에서 긴 이름이 짧은 이름보다 좋다.
❑ 클래스 , 객체에 적합한 이름
- 클래스 이름과 객체 이름은 명사나 명사구가 적합하다. 동사는 사용하지 않는다.
예) Customer, AddressParser
❑ 메서드에 적합한 이름
- 메서드 이름은 동사나 동사구가 적합하다.
예) save, deletePage - 접근자(Accessor), 변경자(Mutator), 조건자(Predicate)는 javabean 표준에 따라 get, set, is를 붙인다.
예) getName, setName, isChanged
❑ 한 개념에 한 단어를 사용하라
- 추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다.
- 예컨대, 동일 코드 기반에 controller, manager, driver를 섞어 쓰면 혼란스럽다. DeviceManager와 ProtocolController는 어떻게 다른지 파악할 수 없어 혼동을 준다.
❑ 의미 있는 맥락을 추가하라
- 보통 이름에 분명한 의미를 부여할 수 있지만 그럼에도 추상적일 땐 마지막 수단으로 접두어를 붙인다.
- 예를 들어, state라는 변수가 있다고 가정하자. 이 때 state는 '상태', '주소의 주(州)' 등을 나타낼 수 있다. '주소의 주'라 가정할 때 가장 좋은것은 Address라는 클래스의 멤버 변수인 것이지만, 그렇지 않을 땐 주소를 뜻하는 "addr"를 추가해 addrState라고 작성하면 의미가 분명해진다.
❑ Reference
클린 코드 | 로버트 C.마틴 | 인사이트
'Clean Code & Refactoring' 카테고리의 다른 글
[Clean Code] 5장. 형식 맞추기 : Formatting (0) | 2022.07.10 |
---|---|
[Clean Code] 4장. 주석 : Comments (0) | 2022.04.17 |
[Clean Code] 9장. 단위 테스트 : Unit Tests (0) | 2022.03.09 |
[Clean Code] 3장. 함수 : Functions (0) | 2021.12.12 |
[Clean Code] 1장. 깨끗한 코드 : Clean Code (0) | 2021.11.13 |