본문 바로가기
JAVA

19일차// [java] Singleton

by aesup 2021. 2. 4.
728x90

Singleton 패턴은 자바에서 많이 사용한다.

먼저 싱글톤이란 어떤 클래스가 최초 한번만 메모리를 할당하고 (static) 그 메모리에 객체를 만들어 사용하는
디자인 패턴을 의미한다.
즉 생성자의 호출이 반복적으로 이뤄져도 실제로 생성되는 객체는 최초 생성된 객체를 반환해주는 것이다.

Singleton 예제(baseball)

package singleton;

import java.util.ArrayList;
import java.util.List;

import dto.HumanDto;

public class Singleton {

    private static Singleton s = null;

    public List<HumanDto> list = new ArrayList<HumanDto>();

    private Singleton() {
    }

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

}

Singleton 예제

package singleton;

public class SingletonClass {

    private static SingletonClass sc = null;

    public int sNumber;
    public String name;    

    //외부에서 접근 불가능
    private SingletonClass() {
    }

    public static SingletonClass getInstance() {//생성은 여기서만 가능

        if(sc == null) {    // 한번만 실행됨
            sc = new SingletonClass();
        }
        return sc;
    }
}

위 코드에서는 sc라는 전역변수로 선언하는데 static을 줌으로써 인스턴스화 하지 않고 사용할 수 있고
접근 제한자가private으로 되있어서 직접적인 접근은 불가능하다.

또한 생성자도 private 로 되어 있어 new를 통한 객체 생성도 불가능하다.
결국 getInstance 메서드를 통해서 해당 인스턴스를 얻을 수 있게 된다.
위의 예제는 아주 작은 규모에서 사용할 수 있는 싱글톤 패턴이다.

그렇다면 싱글톤 패턴을 사용하는 이유는?

위에서도 언급된 바와 같이 한번의 객체 생성으로 재 사용이 가능하기 때문에 메모리 낭비를 방지할 수 있다.
또한 싱글톤으로 생성된 객체는 무조건 한번 생성으로 전역성을 띄기에 다른 객체와 공유가 용이하다.
이렇게만 보면 싱글턴이 좋아보일 수 있지만 문제점도 존재한다.

참고: https://elfinlas.github.io/2019/09/23/java-singleton/

728x90