본문 바로가기
Design Pattern

[Design Pattern] 싱글톤 패턴(Singleton Pattern)

by jinjin98 2022. 10. 5.

 싱글톤 패턴

 

싱글톤 패턴은 인스턴스를 하나만 만들어 재사용하기 위한 패턴입니다.

클래스의 인스턴스가 딱 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개의 참조 변수가 하나의 단일 객체를 참조하는 것입니다.

 

스프링 프레임워크에서 스프링 컨테이너가 관리하는 빈 객체들은 싱글톤 패턴이 적용되어

요청이 올 때 마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효율적으로 사용할 수 있습니다.

 

이 포스팅은 자바 객체 지향의 원리와 이해의 내용을 참고하여 작성했습니다.

 

댓글