-
리팩터링 2판 - 3. 코드에서 나는 악취Books/리팩터링 2판 2022. 6. 15. 13:55
3-1. 코드의 나쁜 냄새란?
3-2. 나쁜 냄새 ( 기본적인 악취 )
코드에서 나는 악취들 종류
- 기이한 이름 ( Mysterious Name )
ㆍ코드 이해력, 가독성 X
- 중복 코드 ( Duplicated Code )
ㆍ실수와 에러 발생할 확률 ↑
- 긴 함수 ( Long Function )
ㆍ이해하기 어려움, 재사용성 ↓
- 긴 매개변수 목록 ( Long Parameter List )
ㆍ사용하기 어려움, 잦은 실수
- 전역 데이터 ( Global Data )
ㆍ최악, 유령같은 버그 출몰
- 가변 데이터 ( Mutable Data )
ㆍ예상하지 못한 곳에서 데이터를 변경
3-3. 나쁜 냄새2 ( 고급레벨 )
- 뒤엉킨 변경 ( Divergent Change )
ㆍ다양한 이유로 수정을 해야함
ㆍSRP 원칙 준수 X
- 산탄총 수술 ( Shotgun Surgery )
ㆍ한 개를 수정하면 여러 곳에서 수정해야 함
- 기능 편애 ( Feature Envy )
ㆍ다른 모듈과 더 밀접하게 상호작용
ㆍ모듈 수정시 산탄총 수술...
- 데이터 뭉치 ( Data Clumps )
ㆍ여러 곳에서 항상 함께 쓰임
ㆍ데이터와 데이터처리로직이 뭉쳐다님
- 기본형 집착 ( Primitive Obsession )
ㆍ관련된 코드가 여기저기
- 반복되는 switch문 ( Repeated Switches )
ㆍ새로운 타입이 추가되면 여기저기 업데이트
3-4. 나쁜 냄새3 ( 기타 냄새들 )
- 반복문 ( Loops )
ㆍ절차형의 코드 → 사이드 이펙
- 성의 없는 요소 ( Lazy Element )
ㆍ불필요한 함수, 클래스, 인터페이스
- 추측성 일반화 ( Speculative Generality )
ㆍ혹시 모르니, 미래를 위해서
- 임시 필드 ( Temporary Field )
ㆍ특정한 상황에서만 사용됨, 이해도 ↓
- 메세지 체인 ( Message Chains )
ㆍ내부 로직이 노출됨
- 중개자 ( Middle Man )
ㆍ단순 전달만 하는 불필요한 코드
- 내부자 거래 ( Insider Trading )
ㆍ모듈 사이 데이터 거래 → 결합도 ↑
- 거대한 클래스 ( Large Class )
ㆍ중복 코드 ↑, 뒤엉킨 변경 ↑
- 서로다른 인터페이스의 대안 클래스들 ( Alternative Classes with Different Interfaces )
ㆍ서로 대체성 ↓, 재사용성 ↓
ㆍ비슷한 일을 하지만 다른 인터페이스를 가질 경우
- 데이터 클래스 ( Data Class )
ㆍ필요한 로직이 여기저기
- 상속 포기 ( Refused Bequest )
ㆍ상속의 오용, 남용은 위험
- 주석 ( Comments )
ㆍ필요없는 주석은 악!
'Books > 리팩터링 2판' 카테고리의 다른 글
리팩터링 2판 - 9. 데이터 조직화 (0) 2022.06.17 리팩터링 2판 - 8. 기능이동 (0) 2022.06.17 리팩터링 2판 - 7. 캡슐화 (0) 2022.06.16 리팩터링 2판 - 6. 기본적인 리팩터링 (0) 2022.06.15 리팩터링 2판 - 2. 리팩토링 원칙 (0) 2022.06.15