🛠
싱글톤 vs. Static
Invalid date
아직 잘 모르는 분야라서 우선 두개의 차이점에 대해서만 기록해본다. 둘 중 어느 것을 어느 때에 사용해야 하는지에 대한 판단은 잘 모르겠지만 이 링크 를 확인해보면 singleton 사용을 지양하라고 했고, 또 정적 메소드도 객체지향에서는 지양하는 것이 좋다고 한다.
싱글톤
- 단 하나의 객체만을 생성할 수 있는 패턴이다. 객체를 생성하려고 할 때마다 이미 생성된 것을 반환하거나 없다면 해당 시간에 처음 생성하도록 한다.
- 정적 클래스와는 달리 싱클톤 클래스는
확장
과인터페이스 구현
이 가능하다. - 언제 생성하는지에 대한 시점을 조정할 수 있다.
- 객체이기 때문에 힙에 싱글톤 객체가 저장된다. 따라서 쓰레드간 공유가 가능하다.
- 싱글톤은 구현으로 단 하나만 생성되게 보장한 것이지만 그 자체로는 클래스 객체이기 때문에 직렬화가 가능하다.
Static 클래스
- Static 메소드를 가지는 클래스를 말한다.
- 어플리케이션이 메모리에 로드 될 때 정적 스택에 바로 초기화 된다.
- 표준 클래스라고 보기는 어렵고
함수와 변수가 있는 네임스페이스
라고 볼 수 있다. - 정적 스택에 저장이 되기 때문에 쓰레드 관리가 어렵다.
차이
- 엘레강트 오브젝트 발췌
- 싱클톤 패턴과 정적 클래스의 가장 큰 차이는 싱클톤은 분리 가능한 의존성으로 연결되어 있지만 정적 클래스는 하드코딩의 결정체라는 것이다.
- 싱글톤 패턴을 사용하면 내부에 선언된 정적 객체를 교체해서 변경할 수 있다.
- 정적 메소드로 구현된 유틸리티 클래스는 분리할 수 없는 하드코딩된 의존성이다.
- 따라서 OOP 관점에서는 정적 클래스가 싱글톤 패턴보다 더 안좋다.