아직 잘 모르는 분야라서 우선 두개의 차이점에 대해서만 기록해본다. 둘 중 어느 것을 어느 때에 사용해야 하는지에 대한 판단은 잘 모르겠지만 이 링크 를 확인해보면 singleton 사용을 지양하라고 했고, 또 정적 메소드도 객체지향에서는 지양하는 것이 좋다고 한다.

싱글톤

  • 단 하나의 객체만을 생성할 수 있는 패턴이다. 객체를 생성하려고 할 때마다 이미 생성된 것을 반환하거나 없다면 해당 시간에 처음 생성하도록 한다.
  • 정적 클래스와는 달리 싱클톤 클래스는 확장인터페이스 구현이 가능하다.
  • 언제 생성하는지에 대한 시점을 조정할 수 있다.
  • 객체이기 때문에 힙에 싱글톤 객체가 저장된다. 따라서 쓰레드간 공유가 가능하다.
  • 싱글톤은 구현으로 단 하나만 생성되게 보장한 것이지만 그 자체로는 클래스 객체이기 때문에 직렬화가 가능하다.

Static 클래스

  • Static 메소드를 가지는 클래스를 말한다.
  • 어플리케이션이 메모리에 로드 될 때 정적 스택에 바로 초기화 된다.
  • 표준 클래스라고 보기는 어렵고 함수와 변수가 있는 네임스페이스 라고 볼 수 있다.
  • 정적 스택에 저장이 되기 때문에 쓰레드 관리가 어렵다.

차이

  • 엘레강트 오브젝트 발췌
    • 싱클톤 패턴과 정적 클래스의 가장 큰 차이는 싱클톤은 분리 가능한 의존성으로 연결되어 있지만 정적 클래스는 하드코딩의 결정체라는 것이다.
    • 싱글톤 패턴을 사용하면 내부에 선언된 정적 객체를 교체해서 변경할 수 있다.
    • 정적 메소드로 구현된 유틸리티 클래스는 분리할 수 없는 하드코딩된 의존성이다.
    • 따라서 OOP 관점에서는 정적 클래스가 싱글톤 패턴보다 더 안좋다.