Inappropriate Intimacy

  • 두 클래스가 긴밀하게 얽혀 있어 높은 의존성을 초래하는 경우를 의미한다.
  • 코드 재사용성 감소, 복잡성 증가, 코드 유지 관리 및 테스트의 어려움이 발생
  • 비공개 필드 및 메소드에 대한 직접 액세스, 내부 상태 공유, 클래스 간 과도한 메소드 호출 등 다양한 형태로 발생

원인

  1. 추상화 : 서로의 내부 정보에 직접 액세스 하는 것은 추상화 및 캡슐화가 부족하다는 것을 의미한다.
  2. 잘못된 디자인 결정 : 긴밀한 협력에 대한 영향도를 고려하지 않아서 발생
  3. 디자인 패턴에 대한 이해 부족 : 의존성 주입, 옵저버 등에 익숙하지 않을 경우 긴밀한 결합을 초래할 수 있다.
  4. 레거시

영향도

  1. 코드 재사용성 감소
  2. 복잡성 증가
  3. 테스트의 어려움
  4. 제한된 확장성

친밀성을 피하거나 완화하는 방법

  1. 디자인 패턴 적용 ( 파사드, 옵저버 등 )
  2. 동작을 캡슐화
  3. 인터페이스를 사용
  4. IOC를 구현
  5. 리팩토링