Notice
Recent Posts
Recent Comments
«   2025/07   »
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
07-13 15:21
Today
Total
관리 메뉴

해킹공주의 일상

싱글톤(Singleton) 패턴이란? 본문

지식 창고

싱글톤(Singleton) 패턴이란?

7.3.7 2024. 4. 18. 16:49

개요

잘못된 세션에 의한 데이터 정보노출에서 싱글톤에 대한 설명이 나와서 찾아보았다.

 

싱글톤 패턴

싱글톤 패턴은 한 클래스에 해당하는 객체를 단 한 번만 만들어서 사용하는 디자인 패턴이다.

 

과자공장을 예를 들어보자. 기계 중에는 초콜릿, 사탕 두가지를 다 만들수 있는 기계가 있고, 오로지 쿠키만 만들수 있는 기계가 존재한다고 할때, 오로지 쿠키만 만드는 기계가 싱글톤 패턴에 해당한다고 할 수 있다. 해당 쿠키 기계는 아래와 같은 특징이 있다.

 

  1. 하나의 인스턴스만: 공장에는 쿠키 기계가 하나뿐이다. 즉, 하나의 클래스에 해당하는 객체는 오직 하나만 존재한다.
  2. 항상 같은 것을 사용: 쿠키를 만들 때마다 새로운 기계를 만들지 않고, 이미 있는 쿠키 기계를 계속 사용해요. 그래서 쿠키를 만들 때마다 항상 같은 쿠키 기계를 사용한다.
  3. 과자 기계가 공유됨: 같은 공장에서 같은 쿠키 기계를 공유한다.

그래서 싱글톤 패턴은 쿠키 기계처럼 프로그램 전체에서 하나의 객체만 필요하고, 그 객체를 여러 곳에서 공유해서 사용해야 할 때 유용하다.

 

아래는 싱글톤 패턴의 예시이다. 

public class Singleton {
    // 정적 멤버 변수로 유일한 인스턴스를 저장합니다.
    private static Singleton instance;

    // private 생성자를 사용하여 외부에서 인스턴스를 생성하지 못하도록 합니다.
    private Singleton() {
    }

    // 인스턴스를 반환하는 정적 메서드입니다.
    public static Singleton getInstance() {
        // 인스턴스가 없는 경우에만 인스턴스를 생성하고 반환합니다.
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

    // 싱글톤 객체의 다른 메서드들...
}

 

싱글톤 패턴 이외에도 여러가지 패턴들이 존재하는데, 쉽게 비교하자면 다음과 같다.

 

- 자신의 static 메서드를 가지고 객체를 생성 : 싱글톤 패턴

- 다른 클래스의 객체를 가지고, 객체를 생성 : 팩토리 패턴

 

그래서 이게 싱글톤 패턴이다 라는 걸 어떻게 판단하는데?

 

단순하게 static 객체가 있다, 없다로 판단하는게 아니라 아래와 같은 조건들을 충족할 때 싱글톤 패턴이라고 할 수 있다.

 

  1. 생성자를 private으로 선언: 외부에서 인스턴스를 직접 생성하는 것을 막기 위해 생성자를 private으로 선언
  2. 정적(static) 멤버 변수로 유일한 인스턴스를 저장: 클래스 내부에 정적(static) 멤버 변수를 선언하여 유일한 인스턴스를 저장
  3. 정적(static) 메서드를 통한 인스턴스 반환: 유일한 인스턴스에 접근할 수 있는 정적(static) 메서드를 제공한다. 이 메서드는 인스턴스가 없는 경우에만 인스턴스를 생성하고, 이미 인스턴스가 존재하는 경우에는 기존 인스턴스를 반환한다.

 

한번에 이해하기는 어렵다. 직접 만들어봐야 알겠다. 

그리고 06.01 잘못된 세션에 의한 데이터 정보노출 항목에서 말하는 싱글톤 객체필드는 싱글톤 패턴과 다른말임을 유의하자..

Comments