디자인패턴의 싱글톤패턴 강의를 듣고 언뜻 드는 생각이 있었다.
해당 패턴 자체가 인스턴스를 오직 한 개만 만들어서 제공하는 클래스가 필요한 경우에 사용하는 패턴인데 여기서 오직 한개만 만들어서 제공되다는 말에 static이 떠올랐다.
일단 싱글톤과 스태틱의 특징을 정리하면 다음과 같다.
싱글톤과 정적의 특징
싱글톤
- 단 하나의 객체만을 생성할 수 있는 패턴으로 객체를 생성하려고 할 때마다 이미 생성된 것을 반환하거나 없다면 해당 시간에 처음 생성한다.
- 정적 클래스와는 달리 싱클톤 클래스는 확장과 인터페이스 구현이 가능하다
- 언제 생성하는지에 대한 시점을 조정할 수 있다.
- 객체이기 때문에 힙에 싱글톤 객체가 저장된다. 따라서 쓰레드간 공유가 가능하다.
- 싱글톤은 구현으로 단 하나만 생성되게 보장한 것이지만 그 자체로는 클래스 객체이기 때문에 직렬화가 가능하다.
Static 클래스
- Static 메소드를 가지는 클래스를 말한다.
- 어플리케이션이 메모리에 로드 될 때 정적 스택에 바로 초기화 된다.
- 표준 클래스라고 보기는 어렵고 함수와 변수가 있는 네임스페이스 라고 볼 수 있다.
- 정적 스택에 저장이 되기 때문에 쓰레드 관리가 어렵다.
차이점
인스턴스 생성
- 싱글톤: 단 하나의 인스턴스를 보장, 지연 초기화 가능
- 스태틱: 프로그램 시작 시 메모리 할당, 인스턴스 없음
메모리 할당
- 싱글톤: 첫 호출 시 할당
- 스태틱: 프로그램 로드 시 할당
상속/다형성
- 싱글톤: 가능
- 스태틱: 불가능
인터페이스 구현
- 싱글톤: 가능
- 스태틱: 불가능
테스트
- 싱글톤: Mock 객체로 대체 가능
- 스태틱: 테스트가 어려움
이렇게 특징을 정리해보니 차이점들이 눈에 띄고 헷갈리지 않고 사용이 가능할 것으로 보인다.
'공부방 > 디자인패턴' 카테고리의 다른 글
GoF::추상 팩토리 패턴(Abstract Factory Pattern) (0) | 2022.02.03 |
---|