싱글톤 패턴
싱글톤 패턴은 인스턴스를 하나만 만들어 재사용하기 위한 패턴입니다.
클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이므로
객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 합니다.
이를 구현하려면 객체 생성을 위한 new 에 제약을 걸어야 하고,
만들어진 단일 객체를 반환할 수 있는 메서드가 필요합니다.
따라서 싱글톤 패턴에는 다음 3가지가 반드시 필요합니다.
1. new 를 실행해서 객체를 생성할 수 없도록 생성자에 private 접근 제어자를 지정합니다.
2. 유일한 단일 객체를 번한할 수 있는 정적 메서드가 필요합니다.
3. 유일한 단일 객체를 참조할 정적 참조 변수가 필요합니다.
코드로 알아보겠습니다.
public class Singleton {
static Singleton singletonObject;
private Singleton () {};
public static Singleton getInstance() {
if(singletonObject == null) {
singletonObject = new Singleton();
}
return singletonObject;
}
}
public class Client {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
Singleton s3 = Singleton.getInstance();
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
}
Singleton 클래스를 보면 생성자에 private 접근 제어자가 붙어있고
getInstance() 정적 메서드로만 객체를 반환 받을 수 있습니다.
처음 메서드를 호출할 때, 즉 객체에 값이 존재하지 않을 때는 new 를 실행하여 객체를 생성해 반환하고
그 이후 메서드가 호출될 때는 기존에 존재하는 객체를 반환합니다.
Client 클래스에서 getInstance() 를 3번 호출해 반환받은 객체를 전부 출력해보면 해시코드가 같아
모두 같은 객체인 것을 확인할 수 있습니다.
이렇게 singletonObject, s1, s2, s3 4개의 참조 변수가 하나의 단일 객체를 참조하는 것입니다.
스프링 프레임워크에서 스프링 컨테이너가 관리하는 빈 객체들은 싱글톤 패턴이 적용되어
요청이 올 때 마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효율적으로 사용할 수 있습니다.
이 포스팅은 자바 객체 지향의 원리와 이해의 내용을 참고하여 작성했습니다.
'Design Pattern' 카테고리의 다른 글
[Design Pattern] 어댑터 패턴(Adapter Pattern) (0) | 2022.10.21 |
---|---|
[Design Pattern] 데코레이터 패턴(Decorator Pattern) (0) | 2022.10.03 |
[Design Pattern] 프록시 패턴(Proxy Pattern) (0) | 2022.10.03 |
[Design Pattern] 템플릿 콜백 패턴(Template Callback Pattern) (0) | 2022.10.03 |
[Design Pattern] 전략 패턴(Strategy Pattern) (0) | 2022.10.03 |
댓글