티스토리 뷰
싱글톤(Singleton)이란 무엇일까?
간단히 말해 1개의 Class에 1개의 Instance를 말합니다.
다르게 표현하면 Instance가 사용될 때 똑같은 Instance을 만드는 것이 아니라, 동일 Instance 을 사용하도록 합니다.
기본적으로 사용하는 Singleton은 다음과 같습니다.
1 2 3 4 5 6 7 8 | public final class Singleton(){ private static final Singleton instance = new Singleton(); private Singleton(){} public static Singleton getInstance() { return instance; } } |
Lazy initialization
인스턴트가 사용하는 시점에 인스턴스 생성하는 방식도 있습니다.
multi thread 방식에서 동일 시점에 인스턴스 생성 시 두 번 생길 수 있는 문제를 방지하기 위해서 synchronized 을 붙였습니다.
1 2 3 4 5 6 7 8 9 10 | public final class Singleton(){ private static Singleton instance = null; private Singleton(){} public static synchronized Singleton getInstance() { if (instance == null){ instance = new Singleton(); return instance; } } |
Effective Java에서 언급된 내용인데, 클래스 사용 시 무조건 생성자를 생성하는 것이 아니라 public static 함수를 사용하는 어떨지 고민하고 사용하길 권장합니다.
enum 싱글턴
JDK 1.5 부터 싱글턴을 구현할 때 새로운 방법을 할 수있습니다.
원소가 하나뿐인 enum 자료형의 정의합니다. 간결하며, 직렬확 자동으로 처리되는 장점이 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | public enum Singtuns { INSTANSE; private int a = 0; private Singtuns(){ System.out.println("Singtuns C"); a = 10; } @Override public String toString() { System.out.println("a = " + String.valueOf(a)); // Log.d("TEST", "a = " + String.valueOf(a)); return super.toString(); } public void hi(){ a = 1; System.out.println("hi"); } } ... public static void main(String[] args) { System.out.println(Singtuns.INSTANSE.toString()); Singtuns.INSTANSE.hi(); System.out.println(Singtuns.INSTANSE.toString()); } |
enum 싱글턴 접근법은 public 필드와 사용하는 구현법과 동등합니다.
아직 널리 사용되고 있지않지만 가장 좋은 싱글턴 방법이지 않을까 생각된다고 Effective Java 는 언급하였습니다.
참고
* https://blog.seotory.com/post/2016/03/java-singleton-pattern
* https://en.wikipedia.org/wiki/Singleton_pattern
* Effective Java 2/E
'프로그래밍 > Design Patterns' 카테고리의 다른 글
역할 사슬(Chain of Responsibility) 패턴 (0) | 2022.01.21 |
---|---|
빌더(Builder) 패턴 (0) | 2022.01.20 |
브리지(Bridge) 패턴 (0) | 2022.01.14 |
템플릿 메소드 패턴 (0) | 2021.09.27 |
데코레이터 패턴(Decorator Pattern) (0) | 2021.08.09 |
- IT
- 미션차이나센터
- swift
- Android Studio
- IOS
- 선교
- 고시문
- 임용고시
- 고시문헬퍼
- 점수판
- DI
- 스코어헬퍼
- Kotlin
- 코틀린
- 알고리즘
- view
- flutter
- MCC
- missionchina
- missioon
- 탁구
- Android
- 디자인패턴
- RXjava
- issue
- java
- push
- 패턴
- 안드로이드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |