깨끗하지 못한 코드에서 악취가 난다고 한다.
이번에는 나쁜 코드에게서 나는 냄새의 종류를 간략하게(?) 공부했다.
작업하기 어려울 정도로 거대한 코드, 메서드 및 클래스
너무 많은 라인을 가진 메서드
너무 많은 필드/메서드/라인을 가진 Class
간단한 작업을 위해 작은 객체 대신 기본 요소 사용
메서드에 대한 매개변수가 3~4개 이상
각각의 부분이 합쳐져서 하나의 구성 요소를 이루는 경우
ex) 각각 다른 곳에 있는 이름, 나이, 성별 ··· → 사람
객체 지향 프로그래밍 원칙의 불완전하거나 잘못된 적용
두 클래스가 동일한 기능을 수행하지만 메서드 이름이 다른 경우
특정 상황에서만 값이 있는 경우
부모 클래스의 일부 메서드와 일부 속성만 사용하는 경우
복잡한 switch문이나 if문을 가지는 경우
하나의 결과가 변경되는 것이 다른 여러 곳의 변경을 필요로 하는 경우
클래스 하나를 바꾸면 관련 없는 여러 메서드의 변경을 필요로 하는 경우
하위 클래스 생성시 다른 클래스의 하위 클래스도 생성해야하는 경우
하나의 변경이 다른 클래스의 변경을 필요로 하는 경우
산탄총처럼 원샷원킬해서 산탄총 수술인 것 같다
무의미하고 불필요한 것이 있는 경우
직관적이지 않은 명칭으로 클래스/메서드/필드 등을 선언하여서 작성되는 주석도 불필요하다.
거의 동일한 코드가 여러개 있다면 유지관리가 어렵다.
Getter / Setter만을 제공하는 클래스
객체의 진정한 힘은 데이터에 대한 동작이나 작업을 포함하는 것이나 데이터 클래스는 독립적으로 작동 X
더 이상 사용되지 않는 코드
클래스를 유지하고 이해하기 위한 비용이 발생하는 경우
추측성으로 생긴 클래스/메서드/필드/매개변수
만약을 대비하여 미리 생성한 사용하지 않는 요소들
클래스 간의 과도한 결합에 기여하거나 과도한 위임으로 대체될 경우
메서드가 자신의 데이터보다 다른 객체의 데이터를 더 많이 사용
다른 클래스가 서로의 내부 필드와 메서드를 너무 많이 사용
객체 요청이 연속적으로 발생할 때
ex) jetty.getDept().getManager()
→ Jetty의 관리자를 알기 위해 Jetty의 부서를 알아야 한다.
클래스가 하나의 작업만 수행하고 다른 클래스에 작업을 위임
클래스가 중재자 역할만 하고 다른 작업을 수행하지 못한다면 존재할 이유 없다.
📑 참고 자료