728x90
싱글톤 패턴(Singleton pattern)이란?
싱글톤 패턴이란 어떤 클래스가 생성자가 수차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 한 번만 메모리를 할당하며 그 메모리에 객체를 만들어 사용하는 패턴입니다.
생성자의 호출이 반복적으로 이루어져도 실제로 생성되는 객체는 최초 생성된 객체를 반환해 줍니다.
이런 싱글톤 패턴은 자바에서 많이 사용합니다.
1. Singleton.java
package com.singleton;
// singleton pattern : 메모리(heap)에 객체를 한번만 생성
public class Singleton {
// 2. 객체를 확인할 주소(reference) 변수 선언
private static Singleton singleton;
// 1. 보통은 public으로 선언하지만 외부에서 사용할 수 없도록 private으로 선언해보았습니다.
private Singleton() {
System.out.println("singleton instance 생성");
}
// 3. 객체가 heap에 있는지 확인
// 있으면 주소값 리턴, 없으면 새로운 객체 생성
public static Singleton getInstance() {
if(singleton == null) {
singleton = new Singleton();
System.out.println("new!");
}else {
System.out.println("exist!");
}
return singleton;
}
}
2. MTest.java
package com.singleton;
public class MTest {
public static void main(String[] args) {
//Singleton singleton = new Singleton(); //생성자가 private로 선언되어있어 에러발생
Singleton s1 = Singleton.getInstance();
System.out.println(s1);
System.out.println(s1.hashCode());
Singleton s2 = Singleton.getInstance();
System.out.println(s2);
System.out.println(s2.hashCode());
}
}
일반적으로 싱글톤 패턴이 사용되는 경우의 예제입니다.
위의 MTest의 실행 결과는 다음과 같습니다.
객체를 두 번 생성했지만 한 번만 생성이 된 걸 볼 수 있습니다.
처음 호출했을 때는 null값을 가지고 있었지만 두 번째 호출될 때는 이미 값이 있습니다.
이러한 싱글톤 패턴은 한 번의 객체 생성으로 재 사용이 가능하기에 메모리 낭비를 방지할 수 있습니다.
또한 무조건 한번 생성으로 전역성을 띠기 때문에 다른 객체와 공유 또한 용이합니다.
하지만 멀티쓰레드(Muti Thread) 환경에서 안전하지 않다는 단점이 있습니다.
728x90
'Java 관련 > Java' 카테고리의 다른 글
[Java] 컬렉션(Collection framework) (0) | 2021.11.11 |
---|---|
[Java] 제네릭(Generic) (0) | 2021.11.10 |
[Java] 내부 클래스(inner class) (0) | 2021.11.08 |
[Java] 인터페이스(interface)를 이용한 도형의 넓이 구하기 & 캡슐화 (0) | 2021.11.07 |
[Java] 추상클래스(abstract class) (0) | 2021.11.06 |