공부방/디자인패턴

싱글톤(Singleton)과 정적(Static)의 차이

디자인패턴의 싱글톤패턴 강의를 듣고 언뜻 드는 생각이 있었다.

 

GoF::싱글톤 패턴(Singleton Pattern)

이 글은 '백기선의 코딩으로 학습하는 GoF의 디자인 패턴' 강좌를 듣고 해당 내용을 공부하며 정리한 글입니다. 싱글톤 패턴(Singleton Pattern) 인스턴스를 오직 한 개만 만들어서 제공하는 클래스가

dev-sanghun.tistory.com

 

해당 패턴 자체가 인스턴스를 오직 한 개만 만들어서 제공하는 클래스가 필요한 경우에 사용하는 패턴인데 여기서 오직 한개만 만들어서 제공되다는 말에 static이 떠올랐다.

 

일단 싱글톤과 스태틱의 특징을 정리하면 다음과 같다.

 

싱글톤과 정적의 특징

싱글톤

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

Static 클래스

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

차이점

인스턴스 생성

  • 싱글톤: 단 하나의 인스턴스를 보장, 지연 초기화 가능
  • 스태틱: 프로그램 시작 시 메모리 할당, 인스턴스 없음

메모리 할당

  • 싱글톤: 첫 호출 시 할당
  • 스태틱: 프로그램 로드 시 할당

상속/다형성

  • 싱글톤: 가능
  • 스태틱: 불가능

인터페이스 구현

  • 싱글톤: 가능
  • 스태틱: 불가능

테스트

  • 싱글톤: Mock 객체로 대체 가능
  • 스태틱: 테스트가 어려움

 

 

이렇게 특징을 정리해보니 차이점들이 눈에 띄고 헷갈리지 않고 사용이 가능할 것으로 보인다.

'공부방 > 디자인패턴' 카테고리의 다른 글

GoF::추상 팩토리 패턴(Abstract Factory Pattern)  (0) 2022.02.03