# Java Singletone Design Pattern
# Java Singletone Design Pattern
by jihoon kim
HTML
<style>
.MJXp-math.MJXp-display {
display:inline !important;
}
</style>
<div id="contents">
#### 원본 : https://examples.javacodegeeks.com/core-java/java-singleton-design-pattern-best-practices-examples/
# Singletone
## Singletone Design Pattern?
- Singleton 패턴은 Creational 디자인 패턴의 일부.
- Java에서 new키워드는 필요할 때마다 클래스의 인스턴스를 작성합니다.
그러나 개발자가 다음과 같은 클래스의 독립 인스턴스를 가져야하는 경우도 있습니다.
- 단일 데이터베이스 연결 개체
- 단일 공유 리소스

## 전제 조건
- 정적 멤버 : static클래스 레벨 변수 와 마찬가지로 JVM 메모리에 단일 인스턴스를 생성 합니다.
- Private Constructor : 외부 세계로부터 Singleton 클래스의 인스턴스 생성을 제한합니다 (즉, new키워드를 사용하여이 클래스의 초기화 가 방지됩니다)
- 정적 팩토리 메소드 : 이것은 Singleton 객체에 대한 전역 액세스 지점을 제공하고 인스턴스를 호출자에게 반환합니다.
## 구조
- 단일 인스턴스의 소유권은 변경할 수 없습니다.
- 게으른 초기화가 권장됩니다.
- 싱글 톤 인스턴스에 대한 전역 액세스는 별도로 제공되지 않습니다.
## SingletonClassDemo.java
```java
package com.java.design.pattern.singleton;
// Lazy Initialization
public class SingletonClassDemo {
// Static attribute.
private static SingletonClassDemo instance = null;
// Private constructor.
private SingletonClassDemo() {
}
// Static function.
public static SingletonClassDemo getInstance() {
// If there is no instance available, create new one (i.e. lazy initialization).
if (instance == null) {
instance = new SingletonClassDemo();
}
return instance;
}
}
```
## Eager Initialization
```java
package com.java.design.pattern.singleton;
// Eager Initialization
public class SingletonClassDemo2 {
// Static attribute.
// Making the "instance" attribute as "final" ensures that only one instance of the class exists.
private static final SingletonClassDemo2 instance = new SingletonClassDemo2();
// Private constructor.
private SingletonClassDemo2() {
}
// Static function.
public static SingletonClassDemo2 getInstance() {
return instance;
}
}
```
- Static Initialization
```java
// Static block initialization...