반응형
1. 싱글톤
- 단 하나의 객체(인스턴스)만을 생성하여 해당 객체를 공유하는 디자인 패턴
- 객체를 생성하려고 할 때마다 이미 생성된 것을 반환하거나 없다면 해당 시간에 처음 생성함
- 정적 클래스와 달리 싱글톤 클래스는 확장, 재정의, 인터페이스 구현이 가능
- 생성 시점을 조정 가능
- 객체이므로 힙에 싱글톤 객체가 저장됨 -> 쓰레드간 공유 가능
- 직렬화가 가능
2. static
- 객체를 만들지 않고, 생성자도 갖지 않음
- 인터페이스 구현 불가능
- override 불가능
- 퍼포먼스는 빠름
- 절차지향적 성향이 강함 -> 무분별한 사용은 객체 지향을 해침
- 어플리케이션이 메모리에 로드될 때 스택에 바로 초기화
- 정적 스택에 저장되기 때문에 쓰레드 관리가 어려움
<면접 예상 질문>
Q. 왜 static을 쓰지 않고 싱글톤 패턴을 사용했나요?
A. 싱글톤은 static 클래스와 달리 확장 및 재정의, 인터페이스 구현이 가능하여 다양하게 활용이 가능합니다. 또한 싱글톤은 객체가 힙에 저장되기 때문에 사용자가 생성시점을 조절할 수 있기에 쓰레드 관리가 가능하지만 static은 스택에 저장되기 때문에 시작시 생성되어 프로그램 종료시까지 유지되기 때문에 쓰레드 관리가 어렵습니다. 그리고 객체 지향 관점에서 봤을 때 static은 절차지향적인 성향이 강해 static의 특징을 지니며 객체지향의 성향을 가진 싱글톤을 사용합니다.