Evade anti-pattern

1. Singleton

  • 유용할 수 있지만 오용되면 크리티컬하다.
  • 최대한 안쓰는 것을 추천하고 최대한 의존성 주입으로 종속성을 관리하고, 필요할 때 인스턴스 생성하는 방향으로 고려
  • 꼭 써야 한다면 thread-safe 한 방향으로

2. god object

  • 너무 긴밀하게 결합된 클래스
  • 책임 소재를 명확히하고 composition과 delegate를 사용하자.

3. magicNumber

  • 명확한 설명 없이 코드 베이스 전체에서 사용하는 하드 코딩된 값(숫자)을 의미
  • 명명된 상수나 열거형을 사용

4. modifiable object

  • 생성 후 객체를 조작하는 경우를 의미한다.
  • 멀티 쓰레드에서 특히나 문제가 될 수 있다.
  • 최대한 불변성을 선호하자 필요하다면 방어적 복사, 동기화를 사용하자

5. hard coupling

  • 서로 강하게 의존해서 다른 클래스에 영향을 주지 않고는 클래스 변경이 어려운 경우를 의미한다.
  • 인터페이스를 사용해서 결합도를 낮추고 분리하는 방향으로 진행하자.
  • 관심사를 더 분리해보자.

6. abuse inheritance

  • 상속을 과도하게 사용하면 이해하기 어렵고 유지 관리하기 어려워진다.
  • 상속은 클래스 간의 긴밀한 결합을 만들고 하위 클래스 동작을 변경하기 어렵게 만든다.
  • 상속보다는 comopsition을 사용하자.