티스토리 뷰

Programming/Java

[java] 싱글톤 기초 패턴

brad.min 2022. 7. 10. 12:25
반응형

본 내용은 인프런 강의를 바탕으로 공부한 내용입니다.

 

코딩으로 학습하는 GoF의 디자인 패턴 - 인프런 | 강의

디자인 패턴을 알고 있다면 스프링 뿐 아니라 여러 다양한 기술 및 프로그래밍 언어도 보다 쉽게 학습할 수 있습니다. 또한, 보다 유연하고 재사용성이 뛰어난 객체 지향 소프트웨어를 개발할

www.inflearn.com

 

싱글톤 패턴

오직 한개의 인스턴스만 만들고 글로벌하게 제공하는 클래스. 게임에 있는 설정 화면 같이 주로 한가지의 목적으로만 사용하는 것에 사용한다.

 

아래의 코드에서 보면 Settings라는 객체를 settings, settings1 두개의 다른 인스턴스를 생성하였다. 이는 Settings객체가 public하게 접근이 가능하기 때문이다. 싱글톤에서는 new라는 인스턴스 생성하는 것을 사용하지 말아야한다. 

public class App {
    public static void main(String[] args){
        Settings settings = new Settings();
        Settings settings1 = new Settings();
        System.out.println(settings == settings1); // True
    }
}

 

Settings 객체를 아래와 같이 변경 하면 싱글톤을 만들 수 있다. 

- 객체 내에서만 접근 가능하도록 클래스 변수 생성 (instance)

- Settings 객체를 private 로 설정하여 외부에서 접근 못하도록 설정

- getInstance 메소드를 public으로 설정하여 외부에서 사용하도록 설정

public class Settings {

    private static Settings instance;

    private Settings () {}

    public static Settings getInstance() {
        if (instance == null){
            instance = new Settings();
        }
        return instance;
    }
}

 

수정된 App 클래스를 보면 Settings의 클래스 getInstance() 메소드를 settings 인스턴스에 할당한다. 이를 통해  Settings.instance 변수에 있는 Settings 클래스를 받아올 수 있다. 그리고 settings1에서는 이미 기존 Settings.instance 가 있기 때문에 기존과 동일한 Settings 클래스를 리턴 받는다. 

public class App {
    public static void main(String[] args){
        Settings settings = Settings.getInstance();  // new를 사용하여 인스턴스를 생성하면 싱글톤 패턴을 만족할 수 없다.
        Settings settings1 = Settings.getInstance();
        System.out.println(settings == settings1); // True
    }
}

이 방법이 가장 기초적인 방법이며 다음에는 멀티 스레드에서의 싱글톤 구현 방법을 알아보고자 한다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함