마틴 파울러가 언급한 22가지 코드의 악취(Bad Smells in 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) | 상속하고 있는 메소드면서 그것을 호출하면 문제가 발생한다. |
코드의 부족을 보충하기 위해 상세한 코멘트가 있다 |