"싱글톤 패턴" : 객체의 인스턴스가 오직 1개만 생성되는 패턴
왜 쓰나요?
- 메모리 측면에서의 이점 : 한 번의 new 연산자를 통해 고정된 메모리를 사용하여 객체 할당 → 나중에 해당 객체에 접근할 때 메모리 낭비 방지 && 이미 생성된 인스턴스 재활용 (속도 측면 이점)
- 데이터 공유가 쉬움 : "싱글톤 인스턴스 = 전역적으로 사용되는 인스턴스" → 다른 클래스의 인스턴스가 접근하여 사용가능 but 동시성 문제 이슈
싱글톤 패턴 구현
SingletonTest.java
SingletonTest 클래스로 생성된 인스턴스를 공유하는 A Class.java
SingletonTest 클래스로 생성된 인스턴스를 공유하는 B Class.java
Test.java
마지막 Test 클래스에서 AClass와 BClass의 객체를 생성해준 뒤 두 객체가 가지고 있는 싱글톤 인스턴스를 비교해주면 "true" 결과값 확인할 수 있음 (두 객체가 같은 인스턴스를 가지고 있음을 확인)
하지만 문제점도 있다.
- 동시성 이슈 : 정적 팩토리 메서드에서 객체 생성을 확인하고 생성자를 호출하면 멀티스레딩 환경에서 발생할 수 있는 동시성 문제가 있음 (syncronized를 사용하여 해결해야함)
- 테스트 어려움 : 싱글톤 인스턴스는 자원을 공유함 그래서 격리된 환경에서 테스트를 하기 위해 매번 인스턴스를 초기화해주어야 함. 초기화를 하지 않으면 전역적으로 공유되는 싱글톤 인스턴스의 특성상 테스트가 온전하게 되지 못함
- 객체지향 원칙 위배 : new 연산자를 사용하여 직접 클래스 안에서 객체를 생성하면 DIP, OCP 원칙을 위반할 가능성이 있음
- 싱글톤 클래스는 자식 클래스를 만들기 어렵고, 내부 상태를 변경하기 어려움
- 유연성이 떨어짐
'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 |