[Refactoring] 나쁜 코드 냄새

말하는 감자·2022년 4월 14일
3

Refactoring

목록 보기
2/9
post-thumbnail

📌 나쁜 코드 냄새

깨끗하지 못한 코드에서 악취가 난다고 한다.
이번에는 나쁜 코드에게서 나는 냄새의 종류를 간략하게(?) 공부했다.

🔥 블로터 (Bloaters)

작업하기 어려울 정도로 거대한 코드, 메서드 및 클래스

긴 메서드 (Long Method)

너무 많은 라인을 가진 메서드

대형 클래스 (Large Class)

너무 많은 필드/메서드/라인을 가진 Class

기본형 집착 (Primitive Obession)

간단한 작업을 위해 작은 객체 대신 기본 요소 사용

긴 매개변수 목록 (Long Parameter List)

메서드에 대한 매개변수가 3~4개 이상

데이터 덩어리 (Data Clumps)

각각의 부분이 합쳐져서 하나의 구성 요소를 이루는 경우
ex) 각각 다른 곳에 있는 이름, 나이, 성별 ··· → 사람

🔥 객체 지향 남용자 (Object-Orientation Abusers)

객체 지향 프로그래밍 원칙의 불완전하거나 잘못된 적용

인터페이스가 다른 대체 클래스 (Alternative Classes with Different Interfaces)

두 클래스가 동일한 기능을 수행하지만 메서드 이름이 다른 경우

임시 필드 (Temporary Field)

특정 상황에서만 값이 있는 경우

상속 포기 (Refused Bequest)

부모 클래스의 일부 메서드와 일부 속성만 사용하는 경우

분기 상태 (Switch Statements)

복잡한 switch문이나 if문을 가지는 경우

🔥 변경 방지 장치 (Change Preventers)

하나의 결과가 변경되는 것이 다른 여러 곳의 변경을 필요로 하는 경우

뒤엉킨 변경 (Divergent Change)

클래스 하나를 바꾸면 관련 없는 여러 메서드의 변경을 필요로 하는 경우

병렬 상속 계층 (Parallel Inheritance Hierarchies)

하위 클래스 생성시 다른 클래스의 하위 클래스도 생성해야하는 경우

산탄총 수술 (Shotgun Surgery)

하나의 변경이 다른 클래스의 변경을 필요로 하는 경우
산탄총처럼 원샷원킬해서 산탄총 수술인 것 같다

🔥 불필요한 것 (DIspensables)

무의미하고 불필요한 것이 있는 경우

주석 (Comments)

직관적이지 않은 명칭으로 클래스/메서드/필드 등을 선언하여서 작성되는 주석도 불필요하다.

중복 코드 (Duplicate Code)

거의 동일한 코드가 여러개 있다면 유지관리가 어렵다.

데이터 클래스 (Data Class)

Getter / Setter만을 제공하는 클래스
객체의 진정한 힘은 데이터에 대한 동작이나 작업을 포함하는 것이나 데이터 클래스는 독립적으로 작동 X

죽은 코드 (Dead Code)

더 이상 사용되지 않는 코드

게으른 클래스 (Lazy Class)

클래스를 유지하고 이해하기 위한 비용이 발생하는 경우

추측성 일반화 (Speculative Generality)

추측성으로 생긴 클래스/메서드/필드/매개변수
만약을 대비하여 미리 생성한 사용하지 않는 요소들

🔥 커플러 (Couplers)

클래스 간의 과도한 결합에 기여하거나 과도한 위임으로 대체될 경우

기능 편애 (Feature Envy)

메서드가 자신의 데이터보다 다른 객체의 데이터를 더 많이 사용

부적절한 친밀함 (Inappropriate Intimacy)

다른 클래스가 서로의 내부 필드와 메서드를 너무 많이 사용

메시지 체인 (Message Chains)

객체 요청이 연속적으로 발생할 때
ex) jetty.getDept().getManager()
→ Jetty의 관리자를 알기 위해 Jetty의 부서를 알아야 한다.

중재자 (Middle Man)

클래스가 하나의 작업만 수행하고 다른 클래스에 작업을 위임
클래스가 중재자 역할만 하고 다른 작업을 수행하지 못한다면 존재할 이유 없다.


📑 참고 자료

https://refactoring.guru/refactoring/smells

profile
나는 말하는 감자다

0개의 댓글