공부 일자 : 21.12.14 화 ~ 15 수
1장 | 깨끗한 코드
유명한 프로그래머들에게 ‘깨끗한 코드’에 대한 의견을 물어봄.
[ 인물 별 주요 키워드 정리 ]
- 비야네 스트롭스트룹
- 우아한 (보기에 즐거운)
- 효율 - 그래디부치
- 가독성 - 빅 데이브 토마스
- 가독성
- 다른 사람이 수정하기 쉬움
- 테스트 케이스 존재 - 마이클 페더스
- 코드를 '주의' 깊게 짜는 것 - 론 제프리스
- 중복 줄이기
- 표현력 높이기 (한 기능만 수행, 제대로 표현) - 워드 커닝햄
- "짐작했던 대로 수행" → 독해률↑
⇒ Robert.C.Martin (밥 아저씨) : 동료들과 함께 깨끗한 코드 정의함
2장 | 의미있는 이름
1. 의도를 분명히 밝히기
- 함수 존재 이유, 수행기능, 사용방법을 유추할 수 있어야 함
- 코드의 단순성 & 함축성 둘 다 챙기기
ex. 게임 판에서 움직임
함수 명 : getFlaggedCells()
리스트 변수 : List <int []> flaggedCells = new ArrayList<int []>();
접근 : if (cell [STATUS_VALUE] == FLAGED)
2. 그릇된 정보를 피하라
- 널리 쓰이는 의미가 있는 단어를 다른 의미의 변수로 사용 X
ex. accountList → accountGroup, bunchOfAccounts, Accounts
- 유사한 개념은 유사한 표기법 사용 (일관성 유지)
→ 최신 자바 환경은 코드 자동 완성 기능 제공 (이름 몇 자 입력 후 핫 키 조합을 누르면 후보 목록 뜸)
3. 의미 있게 구분하라
- 연속된 숫자를 덧붙이거나 불용어(noise word/중복어)를 추가하는 방식은 적절치 못함
(연속된 숫자를 붙이는 경우)
ex. a1, a2 ... aN → source, destination ...
(불분명한 불용어 사용한 경우)
- Product 클래스가 있다는 가정하에, 다른 클래스의 이름을 ProductInfo, ProductData로 하는 것
- 변수 이름에 variable 추가
- 표 이름에 table 추가
- name을 NameString
- money를 moneyAmount
- customer를 customerInfo
- message를 theMessage
⇒ 읽는 사람이 차이를 알도록 이름 짓기
4. 발음하기 쉬운 이름을 사용하라
- 발음하기 쉬운 이름을 사용
ex. genymdhms 대신 generationTimestamp 사용하기
5. 검색하기 쉬운 이름을 사용하라
- 문자 하나 혹은 상수를 사용하는 이름은 검색하기 어려움
- 이름 길이는 범위 크기에 비례하도록 이름 짓기.
만약 변수나 상수를 코드 여러 곳에서 사용한다면 검색하기 쉬운 이름(대체로 긴 이름)이 적절함
ex. s 대신에 sum 사용하기
6. 인코딩을 피하라
- 멤버 변수 에 m_이라는 접두어 붙일 필요 없음
- 인터페이스 클래스와 구현 클래스의 이름을 구분할 시, 인터페이스를 IShapeFactory라고 쓰기 보단,
인터페이스 클래스는 그대로 ShapeFactor로 하고, 구현 클래스의 이름을 ShapeFactoryImp나 CShapeFactory 라고 표현하는 것이 더 좋음
7. 자신의 기억력을 자랑하지 마라
- 자신이 아는 이름으로 변수 이름 짓지 말기
반복문에서 사용하는 변수의 경우 i, j, k는 괜찮음 (l은 절대 안됨)
8. 클래스 이름
- 클래스 이름과 객체 이름은 명사나 명사구
ex. Customer, WikiPage, ACcount, AddressParser 좋음
Manager, Processror, Data, Info 등은 피하고, 동사는 사용하지 않음
9. 메서드 이름
- 메서드 이름은 동사나 동사구
ex. postPayment, deletePage, save 좋음
- 접근자는 get, 변경자는 set, 조건자는 is 를 붙임
- 생성자를 중복정의할 때는 정적 팩토리 메서드를 사용함. 메서드는 인수를 설명하는 이름 사용
10. 기발한 이름은 피하기
- 농담적인 이름과 구어체나 속어 피하기
ex. HolyHandGrenade 보다는 DeleteItems가 좋음
kill() 대신 whack(), Abort()대신 MyShort() 피하기
11. 한 개념에 한 단어 사용하라
- 메서드 이름은 독자적이고 일관적이어야 함
ex. controller, manager, driver 와 같은 추상적인 개념의 이름은 피해서 사용하기
12. 말장난 하지 마라
- 한 단어를 두 가지 목적으로 사용하지 말 것 (같은 맥락 안에서만 일관성 고려하기)
ex. 모두가 기존 값 두 개를 더하거나 이어서 새로운 값을 만드는 것은 add 메서드라는 이름을 줌. 새로 작성하는 메서드는 집합에 값을 하나 추가하는 것인데 이에 add라는 이름을 붙이는 것은 옳지 않음. insert나 append 이름이 적당함
13. 해법 영역에서 가져온 이름을 사용하라
- 기술 이름에는 기술 이름 그대로 사용하기
전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등을 사용해도 괜찮음
14. 문제 영역에서 가져온 이름을 사용하라
- 적절한 '프로그래머 용어'가 없다면 문제 영역에서 이름을 가져오기
15. 의미 있는 맥락을 추가하라
- 클래스, 함수, 이름 공간에 넣어 맥락을 부여하기
실패 시, 접두어 붙이기
ex. firstName, lastName, street, city 등의 변수명 대신에 Address 클래스를 만드는 것이 더 좋다.
아니면 addrFirstName, addrLastName, addrState 등 처럼 접두어를 추가하는 것도 한 가지 방법이다.
15. 불필요한 맥락을 없애라
- 이름에 불필요한 맥락 추가하지 않기
일반적으로 짧은 이름이 긴 이름보다 좋지만, 단 의미가 분명한 경우에 한해서이다.
정리
1. 함수 존재 이유, 수행기능, 사용방법을 유추할 수 있도록 이름 짓기 (코드의 단순성&함축성 둘 다 챙기기) 2. 본래 의미가 있는 단어를 다른 의미의 변수로 사용 X 3. 연속된 숫자를 덧붙이거나 불용어(noise word/중복어)를 추가하는 방식은 적절치 못함 4. 발음하기 쉬운 이름을 사용 5. 검색하기 쉬운 이름을 사용 (이름 길이는 범위 크기에 비례하도록 이름 짓기) 6. 인코딩을 피하기 (멤버 변수 에 m_이라는 접두어 붙일 필요 없고, 인터페이스에 I 붙일 필요 없음) 7. 자신이 아는 이름으로 변수 이름 짓지 말기 8. 클래스 이름과 객체 이름은 명사나 명사구 9. 메서드 이름은 동사나 동사구 (접근자는 get, 변경자는 set, 조건자는 is 붙이기) 10. 농담적인 이름과 구어체나 속어 피하기 11. 한 개념에 한 단어 사용하라 (메서드 이름은 독자적이고 일관적) 12. 한 단어를 두 가지 목적으로 사용하지 말 것 (같은 맥락 안에서만 일관성 고려하기) 13. 기술 이름에는 기술 이름 그대로 사용하기 14. 적절한 '프로그래머 용어'가 없다면 문제 영역에서 이름을 가져오기 15. 클래스, 함수, 이름 공간에 넣어 맥락을 부여하기 (실패 시, 접두어 붙이기) 16. 이름에 불필요한 맥락 추가하지 않기 |
위 글은 [Clean Code 클린코드] 을 읽고 정리한 글입니다.
'#️⃣ 책 리뷰' 카테고리의 다른 글
[책 리뷰] 데이터 파이프라인 핵심 가이드 - 핵심 내용 정리 (0) | 2023.11.06 |
---|---|
[책 정리] 빅데이터를 지탱하는 기술 - CH2 (1) (0) | 2022.10.09 |
[책 정리] 빅데이터를 지탱하는 기술 - Chapter 1 (0) | 2022.02.07 |