Free Lines Arrow
본문 바로가기
Design pattern/GoF(인강편)

[Design Pattern] Singleton Pattern

by skahn1215 2021. 11. 24.
728x90
반응형

Singleton Pattern

  • 우리가장 많이 듣고 접하는 패턴 중에 하나이다.
  • 싱글턴 패턴은 요청의 숫자와 관계없이 한번 만들어둔 객체를 사용하게 된다.
  • 안티패턴이라고 불린다. 이유는 다음과 같다.
     - 싱글톤을 위한 코드가 필요하다.
     - private 변수에 new 를 사용하기 떄문에 상속이 힘들다.
     - 클라이언트가 반드시 구체클래스를 의존해야 된다(getInstance 함수 사용)
     - Singleton은 이미 설정이 정해져 있다.

 

Singleton Pattern 구조

 

 

Singleton Pattern 구현

Singleton class

package patterns.singleton;

public class Singleton {
    static private Singleton singleton = null;

    private String name;

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

코드분석

핵심코드

  • 1. static private Singleton singleton = null;
     - static 을 사용한 이유는 여러번 생성하는게 아니라 한번만 생성하기 때문에 static 으로 선언한다.
     - static 을 사용하게 되면 가비지 컬렉터가 관여하지 않기 때문에 메모리에서 제거 되지 않는다.
     - 모든 객체가 메모리를 공유하게 된다.

  • 2. private Singleton 
     - 다른 곳에서 new 로 생성하지 못하도록 한다.

  • 3. getInstatnce()
     - getInstatnce 함수를 통해서만 가져온다.
     - 동일한 객체를 사용하기 위함.

 

 

Main class

package patterns.singleton;

public class Main {
    public static void main(String[] args) {
        Singleton singleton1 = Singleton.getInstance();
        Singleton singleton2 = Singleton.getInstance();

        singleton1.setName("single1");
        singleton2.setName("single2");

        System.out.println("single1 name: "+singleton1.getName());
    }
}

결과

  • 객체 single1, single2 를 생성후 이름을 다르게 주었지만
  • single1 이름 이 변경되었다.
  • 이로써 객체를 공유한다는 것을 파악할수 있다.
single1 name: single2

 

728x90
반응형

댓글