싱글톤 패턴


단 하나의 유일한 객체를 만들기 위한 코드 패턴

메모리 절약을 위해, 인스턴스가 필요할 때 똑같은 인스턴스를 하는 기업새로 만들지 않고 기존의 인스턴스를 가져와 활용하는 기법

예를 들면, 우리가 전역변수라를 것을 만들어 사용하는 이유가 똑같은 데이터를 메서드마다 지역변수로 선언해서 사용하는 것보다 효율적이기 때문에 사용하는 것과 같다.
이 개념을 그대로 클래스에 적용시킨 것이 싱글톤 패턴!!

따라서 보통 싱글톤 패턴이 적용된 객체가 필요한 경우는 그 객체가 리소스를 많이 차지하는 역할을 하는 무거운 클래스일 때 적합하다.

대표적으로 데이터베이스 연결 모듈을 예로 들 수 있다.

데이터베이스에 접속하는 작업은 그 자체로 무거운 작업에 속하며, 한번만 객체를 생성하고 돌려쓰면 되지 굳이 여러번 생성할 필요가 없기 때문이다.

✨ 싱글톤 패턴 구현 원리


싱글톤으로 이용할 클래스를 외부에서 마구잡이로 new 생성자를 통해 인스턴스화 하는 것을 제한해야 하기 때문에, 클래스 생성자 메서드에 private 키워드를 붙여주면 된다.

그리고 위 그림에서 볼 수 있듯이 getInstance() 라는 메서드에 생성자 초기화를 해줘서 만일 클라이언트가 싱글톤 클래스를 생성해서 사용하려면 getInstance() 라는 메서드 실행을 통해 instance 필드 변수가 null일경우 초기화를 진행하고 null이 아닐경우 이미 생성된 객체를 반환하는 식으로 구성하면 된다.

🔶 싱글톤 패턴 예제

public class Main {
    public static void main(String[] args) {

        // Singleton.getInstance() 를 통해 싱글톤 객체를 각기 변수마다 받아와도 똑같은 객체 주소를 가리킴
        Singleton i1 = Singleton.getInstance();
        Singleton i2 = Singleton.getInstance();
        Singleton i3 = Singleton.getInstance();

        System.out.println(i1.toString()); // Singleton@1b6d3586
        System.out.println(i2.toString()); // Singleton@1b6d3586
        System.out.println(i3.toString()); // Singleton@1b6d3586

        System.out.println(i1 == i2); // true
    }
}

위 코드는 싱글톤으로 구성된 클래스를 외부에서 불러오는 예제이다.

정적 메서드로 getInstance() 를 통해 객체를 불러와 변수에 저장하고 이를 출력해보면 똑같은 객체 주소를 가지고 있는 것을 볼 수 있다.

즉, 객체 하나만 생성해 여러 변수에 돌려쓰기를 한 것!

싱글톤 패턴 구현 기법에는 또 7가지의 방법이 있다.
해당 내용에 대해서는 참고 자료로 올려놓겠다.

참고자료

싱글톤(Singleton) 패턴 - 꼼꼼하게 알아보자

profile
개발과 지식의 성장을 즐기는 개발자

0개의 댓글

Powered by GraphCDN, the GraphQL CDN