본문 바로가기
CS study

디자인 패턴 - 싱글톤 패턴

by DaSsom 2023. 8. 10.

"싱글톤 패턴"  : 객체의 인스턴스가 오직 1개만 생성되는 패턴

 

 

왜 쓰나요?

- 메모리 측면에서의 이점 : 한 번의 new 연산자를 통해 고정된 메모리를 사용하여 객체 할당 → 나중에 해당 객체에 접근할 때 메모리 낭비 방지 && 이미 생성된 인스턴스 재활용 (속도 측면 이점)

 

- 데이터 공유가 쉬움 : "싱글톤 인스턴스 = 전역적으로 사용되는 인스턴스" → 다른 클래스의 인스턴스가 접근하여 사용가능 but 동시성 문제 이슈

 

싱글톤 패턴 구현

 

SingletonTest.java

싱글톤 클래스 구현

 

SingletonTest 클래스로 생성된 인스턴스를 공유하는 A Class.java

 

SingletonTest 클래스로 생성된 인스턴스를 공유하는 B Class.java

 

 

Test.java

 

마지막 Test 클래스에서 AClass와 BClass의 객체를 생성해준 뒤 두 객체가 가지고 있는 싱글톤 인스턴스를 비교해주면 "true" 결과값 확인할 수 있음 (두 객체가 같은 인스턴스를 가지고 있음을 확인)

 

 

하지만 문제점도 있다.

 

- 동시성 이슈 : 정적 팩토리 메서드에서 객체 생성을 확인하고 생성자를 호출하면 멀티스레딩 환경에서 발생할 수 있는 동시성 문제가 있음 (syncronized를 사용하여 해결해야함)

 

- 테스트 어려움 : 싱글톤 인스턴스는 자원을 공유함 그래서 격리된 환경에서 테스트를 하기 위해 매번 인스턴스를 초기화해주어야 함. 초기화를 하지 않으면 전역적으로 공유되는 싱글톤 인스턴스의 특성상 테스트가 온전하게 되지 못함

 

- 객체지향 원칙 위배 : new 연산자를 사용하여 직접 클래스 안에서 객체를 생성하면 DIP, OCP 원칙을 위반할 가능성이 있음

 

- 싱글톤 클래스는 자식 클래스를 만들기 어렵고, 내부 상태를 변경하기 어려움

 

- 유연성이 떨어짐

 

 


테코블

 

싱글톤(Singleton) 패턴이란?

이번 글에서는 디자인 패턴의 종류 중 하나인 싱글톤 패턴에 대해 알아보자. 싱글톤 패턴이 무엇인지, 패턴 구현 시 주의할 점은 무엇인지에 대해 알아보는 것만으로도 많은 도움이 될 것이라

tecoble.techcourse.co.kr

 

'CS study' 카테고리의 다른 글

Answer the Question (8)  (0) 2023.07.28
Answer the Question (7)  (0) 2023.07.27
Answer the Question (6)  (0) 2023.07.26
Answer the Question (5)  (0) 2023.07.25
Answer the Question (4)  (0) 2023.07.24