티스토리 뷰

프로그램을 실행할 때 보통은 많은 인스턴스가 생성된다.

예를 들어 문자열을 표시하는 java.lang.String 클래스의 인스턴스는 문자열 1개에 대해서 1개가 생성된다.

그렇기 때문에 문자열이 1,000개 등장하는 프로그램이라면 1,000개의 인스턴스가 만들어진다.

 

그러나, ‘클래스의 인스턴스가 단 하나만 필요'한 경우가 있다.

그것은 시스템 안에서 1개 밖에 존재하지 않는 것을 프로그램으로 표현하고 싶을 때가 있다.

ex) 컴퓨터 자체를 표현한 클래스, 현재의 시스템 설정을 표현한 클래스, 윈도우 시스템을 표현한 클래스

 

물론, 주의를 기울여 프로그래밍해서 new MyClass()가 1회만 실행되도록 작성하면 MyClass의 인스턴스는 1개만 생성된다.

그러나 ‘프로그래머가 주의를 기울여서 1개만 생성되는 것'이 아니라

  • 지정한 클래스의 인스턴스가 ‘절대로' 1개밖에 존재하지 않는 것을 ‘보증'하고 싶을 때
  • 인스턴스가 1개밖에 존재하지 않는 것을 프로그램 상에서 표현하고 싶을 때

싱글턴 패턴은 인스턴스가 한 개밖에 존재하지 않는 것을 보증하는 패턴입니다.

싱글턴이란 ‘요소를 1개밖에 가지고 있지 않은 집합'을 의미한다.

인스턴스가 한 개밖에 없기 때문에 이와 같은 이름이 붙어졌다.

싱글턴 예제 코드

  • Singleton 클래스 : 인스턴스가 1개만 존재하는 클래스
  • Main 클래스

Singleton 클래스

인스턴스를 1개밖에 만들 수 없으며, singleton은 statid 필드로서 Singleton 클래스의 인스턴스에서 초기화된다.

이 초기화는 Singleton 클래스를 로드할 때 1회만 실행된다.

이 클래스는 private으로 되어 있다.

클래스 외부에서 생성자의 호출을 금지하기 위해서다.

Main 클래스

Singleton의 인스턴스를 가지는 ob1와 ob2가 같은 인스턴스를 얻고 있는지 확인하는 클래스다.

package singleton;

public class Main {
    public static void main(String[] args) {
        System.out.println("Start.");
        Singleton ob1 = Singleton.getInstance();
        Singleton ob2 = Singleton.getInstance();

        if(ob1 == ob2) {
            System.out.println("같은 인스턴스다.");
        } else {
            System.out.println("다른 인스턴스다.");
        }
        System.out.println("end.");
    }
}

 

GitHub - kkoon9/Java-Design-Pattern: Java 언어로 배우는 디자인 패턴 입문 예제 코드

Java 언어로 배우는 디자인 패턴 입문 예제 코드. Contribute to kkoon9/Java-Design-Pattern development by creating an account on GitHub.

github.com

Singleton 패턴의 핵심 키워드

예제 코드와 동작을 살펴봤으니 이젠 핵심 키워드를 살펴보자.

Singleton의 역할

유일한 인스턴스를 얻기 위한 static 메서드를 가진다.

이 메서드는 언제나 동일한 인스턴스를 반환한다.

🤔 인스턴스의 수를 제한할 필요가 있을까?

 

제한을 한다는 것은 전제가 되는 조건을 늘린다는 의미한다.

복수의 인스턴스가 존재하면 인스턴스들이 서로 영향을 미치고, 뜻하지 않은 버그가 발생할 수 있다.

그러나 인스턴스가 1개밖에 없다라는 보증이 있으면 그 전제조건 아래에서 프로그래밍할 수 있게 된다.

 

🤔 유일한 인스턴스는 언제 생성될까?

프로그램의 실행 개시 후 최초의 getInstance 메서드를 호출했을 때 Singleton 클래스는 초기화된다.

그리고 이 때 static 필드의 초기화가 이루어지고 유일한 인스턴스가 만들어진다.

관련 패턴

  • Abstract Factory 패턴
  • Builder 패턴
  • Facade 패턴
  • Prototype 패턴

'JAVA > 디자인 패턴' 카테고리의 다른 글

전략(Strategy) 패턴  (0) 2022.03.21
프로토타입 패턴  (0) 2022.03.15
Factory Method 패턴  (0) 2022.03.11
Template Method 패턴  (0) 2022.03.10
어댑터 패턴  (0) 2022.03.09
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함