Java

[JAVA] 디자인패턴 : 싱글톤 패턴(Singleton Pattern)

연화 2025. 1. 13. 17:33

 

안녕하세요! 이번 포스팅에서는 디자인 패턴 중에서도 가장 기본적이고 널리 사용되는 싱글톤 패턴(Singleton Pattern)에 대해 알아보겠습니다. 싱글톤 패턴은 프로그램에서 단 하나의 객체만 생성하도록 보장하는 패턴으로, 자원 관리와 제어가 중요한 시스템에서 매우 유용하게 활용됩니다.

 

싱글톤 패턴이란?

싱글톤 패턴(Singleton Pattern)은 클래스의 인스턴스가 단 하나만 존재하도록 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 방법을 제공합니다. 이를 통해 동일한 객체를 여러 곳에서 공유할 수 있으며, 자원의 낭비를 줄이고 효율성을 높일 수 있습니다.

주요 특징

  1. 하나의 인스턴스만 유지: 인스턴스가 여러 개 생성되지 않도록 보장합니다.
  2. 전역 접근 제공: 어디서든 같은 인스턴스에 접근할 수 있습니다.
  3. 메모리 절약: 불필요한 객체 생성을 방지해 메모리를 효율적으로 사용합니다.

 

실습으로 싱글톤 패턴에 대해 알아보자

💡 사전기반 지식

클래스와 객체: 자바에서 클래스는 객체를 생성하기 위한 틀입니다. 일반적으로 하나의 클래스에서 여러 객체를 생성할 수 있지만, 싱글톤 패턴은 단 하나의 객체만을 보장합니다.
생성자(Constructor): 객체가 생성될 때 호출되는 메서드로, 싱글톤 패턴에서는 생성자를 외부에서 호출하지 못하도록 제한합니다.
정적 변수와 메서드: 싱글톤 패턴에서 주로 사용되는 정적(static) 멤버에 대한 이해가 필요합니다.

 

싱글톤 패턴 구현 방법

1. 유일한 인스턴스를 저장할 변수 선언

private static SingleTon instance;

2. private 생성자 선언

private SingleTon() { }

3. 정적 메서드로 인스턴스 반환

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

 


 

실습을 통해 싱글톤 패턴을 익혀 봅시다

1. SingleTon 클래스 정의

package com.demo;

// 싱글톤 패턴을 작성해보시오
public class SingleTon {

    // 1. 유일한 인스턴스를 저장할 변수를 선언한다(private, static)
    private static SingleTon instance;

    // 2. 외부에서 객체를 생성하지 못하도록 막기만 한다
    private SingleTon() {

    }

    // 3. 외부에서 인스턴스 주소를 반환받을 수 있는 메서드를 선언한다.
    public static synchronized SingleTon getInstance() {
        if (instance == null) {
            instance = new SingleTon();
        }
        return instance;
    }
}

💡 synchronized 키워드는 멀티스레드 환경에서도 안전하게 동작하도록 보장합니다.

2. 싱글톤 객체 테스트

package com.demo;

public class MainTest {
    public static void main(String[] args) {
        
        SingleTon singleTon1 = SingleTon.getInstance();
        SingleTon singleTon2 = SingleTon.getInstance();

        System.out.println(singleTon1);
        System.out.println(singleTon2);
        
        if(singleTon1 == singleTon2){
            System.out.println("같은 객체가 맞아요");
        }
    }
}

 

실행결과

두 객체의 주소값이 동일하므로 동일한 인스턴스를 공유하고 있음을 알 수 있습니다.

 


싱글톤 패턴의 장점과 단점

장점

  1. 전역 상태 관리: 동일한 객체를 여러 곳에서 공유하여 데이터 일관성을 유지할 수 있습니다.
  2. 메모리 절약: 객체 생성 비용을 절감하고, 메모리 효율성을 높입니다.
  3. 설계 간소화: 단일 인스턴스 사용으로 코드 관리가 간단해집니다.

단점

  1. 테스트 어려움: 전역 객체 사용으로 인해 테스트와 디버깅이 어려워질 수 있습니다.
  2. 멀티스레드 안전성 보장 필요: 동기화 처리가 제대로 이루어지지 않으면 문제가 발생할 수 있습니다.
  3. 의존성 높아짐: 싱글톤 객체에 많은 로직이 집중되면 결합도가 높아질 수 있습니다.

 

싱글톤 패턴의 활용 사례

  1. 설정 관리(Configuration): 애플리케이션 전역에서 공유되는 설정 정보.
  2. 로그 시스템(Logger): 중앙 집중형 로그 기록.
  3. 데이터베이스 연결 관리(DB Connection): 단일 연결 객체를 공유.
  4. 캐싱 시스템(Cache): 메모리 낭비를 줄이기 위한 전역 캐시.

 

싱글톤 패턴은 간단하면서도 매우 강력한 디자인 패턴입니다.
하지만 모든 상황에서 적합한 것은 아니며, 필요에 따라 신중하게 사용해야 합니다.
특히 멀티스레드 환경에서의 안전성과 결합도 문제를 고려하여 설계하는 것이 중요하다고 해요.

이번 포스팅을 통해 싱글톤 패턴의 개념과 구현 방법, 그리고 이를 사용하는 장점과 한계를 이해하는 시간이 되었습니다. 앞으로도 다양한 디자인 패턴을 주제로 한 포스팅으로 찾아뵙겠습니다!

 

👀 디자인 패턴이 뭔가요?

 

[JAVA] 디자인 패턴이란?

안녕하세요! 오늘은 소프트웨어 설계에서 자주 언급되는 디자인 패턴(Design Patterns)에 대해 알아보려고 합니다. 디자인 패턴은 개발자들에게 더 나은 설계를 위한 가이드를 제공하며, 효율적인

dev-yeonwha.tistory.com

 

 

[JAVA] 디자인패턴 : 콜백(Callback) 패턴 알아보기

안녕하세요! 오늘은 디자인 패턴 중에서도 콜백 메서드라는 개념에 대해 알아보겠습니다. 콜백 메서드는 유연하고 확장 가능한 코드 설계를 가능하게 하며, 특히 비동기 처리나 이벤트 기반 시

dev-yeonwha.tistory.com