싱글톤(Singleton) 패턴이란?
- Application 전체에서 오직 단, 한 개의 객체만 생성해서 사용하고 싶을 때 사용하는 것이 바로 싱글톤(Singleton) 패턴이다. 즉, 클래스의 객체를 단, 한 번만 생성하고 싶을 경우에 적용하는 디자인 패턴이다.
- 싱글톤 패턴을 적용할 클래스의 생성자를 private 접근제한자로 선언하여 외부에서 해당 클래스의 객체를 생성하지 못하게 하는것이 포인트이다.
- 단, 외부에서 객체를 생성하지는 못하게 하더라도 반환받아 사용할 수는 있게 해줘야하기 때문에 싱글톤 패턴을 사용하여 선언한 클래스에서 객체를 반환해주는 정적(static) 메서드를 제공하는 것이 일반적이다.
싱글톤(Singleton) 패턴적용한 클래스 선언 예시
public class SingletonExample {
private static SingletonExample singletonExample = new SingletonExample();
private SingletonExample() {}
public static SingletonExample getInstance() {
return singletonExample;
}
}
싱글톤 패턴을 사용하여 클래스를 선언하는 방법은 일반적으로 다음과 같다.
싱글톤 패턴을 적용한 클래스선언 과정
- 외부에서 접근하지 못하도록 private 접근제한자를 사용하여 선언한 상수에 미리 해당 클래스의 객체를 생성하여 초기화해 놓는다.
- 외부에서 해당 클래스의 객체를 생성할 수 없도록 private 접근제한자를 사용하여 생성자를 선언한다.
- 외부에서 미리 생성한 해당 클래스의 객체를 반환 받을 수는 있도록 간접적으로 객체를 반환받을 수 있도록하는 메서드를 선언한다.
위와 같이 싱글톤 패턴을 적용하여 클래스를 선언하면 외부에서 해당 클래스의 객체를 반환받을 수 있는 유일한 방법은 getInstance() 메서드를 사용하는 방법 밖에 없게된다.
싱글톤 패턴 객체비교 예시
public class Test {
public static void main(String[] args) {
SingletonExample se1 = SingletonExample.getInstance();
SingletonExample se2 = SingletonExample.getInstance();
if (se1 == se2) {
System.out.println("같은 객체임");
} else {
System.out.println("다른 객체임");
}
}
}
싱글톤 패턴자체의 목적이 클래스의 인스턴스를 오직 단, 한개의 인스턴스만을 생성하여 사용하도록 하기 위함이기 때문에 위와 같이 SingletonExample.getInstance()를 이용하여 여러번 객체를 반환받아서 비교해 봤자 당연히 같은 객체이기 때문에 출력값은 "같은 객체임" 이 될것이다.
'[Language] Java' 카테고리의 다른 글
[Language/Java] 봉인된 클래스 (Sealed Class) (38) | 2024.01.10 |
---|---|
[Language/Java] final클래스와 final메소드 (68) | 2024.01.06 |
[Language/Java] 싱글톤(Singleton) 패턴 - #2 싱글톤 패턴의 종류와 장단점 (74) | 2024.01.02 |
[Language/Java] 자바(Java)의 메모리 구조 (0) | 2023.11.29 |
[Language/Java] SDK, JDK, JRE, JVM, JIT 란? (1) | 2023.11.28 |