Books/리팩터링 2판

리팩터링 2판 - 3. 코드에서 나는 악취

PHM 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 ) 

    ㆍ필요없는 주석은 악!