2014. 4. 20. 22:02

마틴 파울러가 언급한 22가지 코드의 악취(Bad Smells in Code)


 중복된 코드 (Duplicated Code)

 코드가 여기저기 겹쳐 있다.

 너무 긴 메소드  (Long Method) 메소드가 너무 길다.
 거대한 클래스 (Large Class) 클래스의 파일이나 메소드가 너무 많다. 
 너무 많은 인수 (Long Parameter List) 메소드에 전달하는 인수의 수가 너무 많다.

 변경의 발산 (Divergent Change)

 사양변경이 발생한 경우 수정할 곳이 여기저기 흩어져 있다.
 변경의 분산 (Shotgun Surgery)

 어떤 클래스를 수정하면 다른 클래스도 수정하지 않으면 안 된다. 

 속성, 조작의 부적절한 관계 (Feature Envy)

 언제나 다른 클래스의 속성을 건드리고 있다.

 데이터 덩어리 (Data Clump)

 정리해서 다룰 수밖에 없는 여러 개의 데이터가 하나의 클래스에 정리되어 있지 않다. 

 기본 데이터형의 집착 (Primitive Obsession)

 클래스를 만들지 않고 int같은 기본 데이터형만을 사용한다.

 switch문 (Switch Statements)

 switch문이나 if문을 사용하여 동작을 분할하고 있다.

 평행 상속 구조 (Parallel Inheritance Hierarchies)

 서브클래스를 만들면 클래스 계층에 따로 서브클래스를 만들어야 한다. 

 게으름뱅이 클래스 (Lazy Class)

 클래스가 별로 하는 일이 없다. 

 추측성 일반화 (Speculative Generality)

 언젠가 이렇게 확장하겠지 하고 기대하는 지나친 일반화 

 일시적 속성 (Temporary Field)

 일시적으로 사용할 필드가 있다.

 메시지의 연쇄 (Message Chains)

 메소드가 호출하는 연쇄가 너무 많다.

 중개자 (Middle Man)

 위양(권리를 위임)하고 자신이 하는 일은 없는 클래스가 있다. 
 부적절한 관계 (Inappropriate Intimacy)

 필요 없는 쌍방향 링크가 걸려 있거나 IS-A 관계가 아니면서 상속을 사용한다

 클래스의 인터페이스 불일치
 (Alternative Classes with Different Interface)
 API가 부적절하다.
 미숙한 클래스 라이브러리
 (Incomplete Library Class)
 기존의 클래스라이브러리가 사용하기 힘들다.

 데이터 클래스 (Data Class)

 필드와 getter 메소드와 setter 메소드만 가지고 있는 클래스가 있다.
 상속거부 (Refused Bequest) 상속하고 있는 메소드면서 그것을 호출하면 문제가 발생한다.

 코멘트 (Comment)

 코드의 부족을 보충하기 위해 상세한 코멘트가 있다 


Posted by 곽중선