본문 바로가기
개발/Java

[Java] 자바에서 싱글톤(Singleton)이란? 사용방법까지 알아보자

by 쓸있쏜 2023. 3. 10.

자바에서 싱글톤(Singleton)이란? 사용방법까지 알아보자.

 

자바에서 싱글톤(Singleton)이란 전체 프로그램 내에서 하나의 객체만을 만드는 것을 의미합니다. 이는 싱글톤을 선언한 클래스 이외의 곳에서 새로운 객체를 생성하는 것을 제한하며, 프로그램 내에서 공유하는 객체를 만들기 위한 디자인 패턴 중 하나입니다.

 

싱글톤 패턴을 구현하기 위해서는 객체 앞에 private 접근 제어자를 붙여 다른 클래스에서 객체를 생성하지 못하도록 합니다. 그리고 생성자를 private으로 선언하여 외부에서 객체를 생성하는 것을 막습니다. 그리고 정적 메소드인 getInstance()를 만들어 해당 클래스에서 생성된 유일한 객체를 반환하도록 합니다.

 

예를 들어, 다음과 같은 싱글톤 클래스를 구현할 수 있습니다.

 

public class Singleton {
    private static Singleton instance = null;

    private Singleton() {}

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

위의 코드에서는 Singleton 클래스가 생성될 때 한 번만 객체가 생성되도록 하기 위해 private 접근 제어자를 사용하여 생성자를 제한합니다. 그리고 유일한 객체를 참조할 수 있는 정적 변수인 instance를 선언합니다. getInstance() 메소드에서는 instance가 null일 경우에만 객체를 생성하도록 하며, 이미 생성된 객체가 있다면 해당 객체를 반환합니다.

 

하지만 위의 코드는 멀티스레딩 환경에서 동시에 getInstance() 메소드가 호출될 경우, 여러 개의 객체가 생성될 수 있습니다. 이러한 문제를 해결하기 위해서는 getInstance() 메소드에 synchronized 키워드를 추가하여 동기화 문제를 해결할 수 있습니다.

 

public class Singleton {
    private static Singleton instance = null;

    private Singleton() {}

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

위의 코드에서는 getInstance() 메소드에 synchronized 키워드를 추가하여 스레드 동기화를 수행하며, 동시에 메소드를 호출해도 객체가 한 번만 생성됩니다.

하지만 synchronized 키워드를 사용하면 성능 문제가 발생할 수 있으므로, 객체가 처음 생성될 때만 synchronized 블록을 사용하여 스레드 동기화를 수행하도록 하는 것이 좋습니다.

싱글톤 패턴은 전역 변수를 사용하는 것과 비슷한 개념으로, 객체를 여러 번 생성하지 않고 하나의 객체를 공유하여 사용할 수 있으므로, 자원의 낭비를 방지하고 객체 지향 프로그래밍의 원칙을 준수할 수 있습니다.

 

댓글