[JAVA] 싱글톤 패턴(Singleton Pattern)

2025. 1. 9. 17:51·JAVA
728x90
반응형
SMALL

싱글톤 패턴(Singleton Pattern)이란?

**싱글톤 패턴(Singleton Pattern)**은 하나의 클래스에서 단 하나의 객체만 생성되도록 보장하는 디자인 패턴입니다.
이 패턴은 애플리케이션 전역에서 공유되는 객체를 사용할 때 유용하며, 전역 상태를 관리하거나 공유 리소스를 다룰 때 주로 사용됩니다.


싱글톤 패턴이 필요한 이유

  1. 전역 상태 관리
    • 하나의 인스턴스를 모든 코드에서 공유함으로써 데이터 일관성을 유지합니다.
    • 예: 애플리케이션의 설정 정보 관리, 로그 기록 객체 등.
  2. 메모리 절약
    • 동일한 객체를 여러 번 생성하는 대신 하나의 객체를 공유하여 메모리 사용량을 줄입니다.
  3. 객체 생성을 제어
    • 불필요한 객체 생성을 방지하고, 오직 하나의 객체만 존재하도록 제어합니다.

싱글톤 패턴의 구현 방법

1. 기본 구현 단계

  1. 정적 변수 선언
    • 클래스 내에 유일한 인스턴스를 저장할 정적 변수를 선언합니다.
  2. private 생성자 선언
    • 외부에서 객체를 생성하지 못하도록 생성자를 private으로 선언합니다.
  3. 정적 메서드로 인스턴스 반환
    • 유일한 인스턴스를 반환하는 정적 메서드를 제공합니다.
    • 인스턴스가 없으면 생성하고, 이미 존재하면 기존 인스턴스를 반환합니다.

싱글톤 클래스 예제

package design_patten;

public class SingleTon {

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

    // 2. 외부에서 객체를 생성하지 못하도록 private 생성자 선언
    private SingleTon() {}

    // 3. 정적 메서드로 유일한 인스턴스 반환
    public static SingleTon getInstance() {
        if (instance == null) { // 인스턴스가 없으면 생성
            instance = new SingleTon();
        }
        return instance; // 이미 존재하면 기존 인스턴스 반환
    }
}

싱글톤 패턴 사용 예제

Main 클래스

package design_patten;

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("같은 객체가 맞아요"); // 동일 객체임을 확인
        }
    }
}

출력 결과

design_patten.SingleTon@15db9742
design_patten.SingleTon@15db9742
같은 객체가 맞아요

싱글톤 패턴의 장점과 단점

장점

  1. 인스턴스의 유일성 보장
    • 애플리케이션 전역에서 동일한 객체를 사용합니다.
  2. 메모리 절약
    • 객체를 한 번만 생성하므로 메모리를 효율적으로 사용할 수 있습니다.
  3. 전역 상태 관리 용이
    • 설정, 로그, 데이터베이스 연결 등 전역적으로 공유되는 리소스를 관리하기 적합합니다.

단점

  1. 테스트 어려움
    • 싱글톤 패턴은 전역 상태를 사용하기 때문에 단위 테스트 시 의존성이 생길 수 있습니다.
  2. 멀티스레드 환경 문제
    • 동기화 처리를 하지 않으면 멀티스레드 환경에서 두 개 이상의 인스턴스가 생성될 가능성이 있습니다.

멀티스레드 환경에서 싱글톤 패턴 개선

멀티스레드 환경에서는 synchronized 키워드를 사용하여 동기화하거나, 이른 초기화(Eager Initialization) 또는 이중 검증(Double-Checked Locking) 방식을 사용하여 문제를 해결할 수 있습니다.

 

동기화 방식

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

 

이른 동기화 방식

public class SingleTon {
    private static final SingleTon instance = new SingleTon();

    private SingleTon() {}

    public static SingleTon getInstance() {
        return instance;
    }
}

싱글톤 패턴은 객체의 유일성을 보장하고, 전역 상태를 효율적으로 관리하는 강력한 도구입니다.
특히, 애플리케이션의 설정 관리, 로그 처리, 데이터베이스 연결 관리 등 리소스 공유가 필요한 상황에서 매우 유용합니다.
멀티스레드 환경에서 적절한 개선 방법을 적용하면 더욱 안전하고 효율적인 구현이 가능합니다.

728x90
반응형
LIST

'JAVA' 카테고리의 다른 글

[JAVA] 코딩테스트 필수 문법 정리  (0) 2025.02.02
[JAVA] 전략 패턴(Strategy Pattern)  (0) 2025.01.16
[JAVA] 어댑터 패턴(Adapter Pattern)  (1) 2025.01.09
[JAVA] 콜백 메서드란?  (0) 2025.01.09
[JAVA] 디자인 패턴(Design Pattern)  (0) 2025.01.09
'JAVA' 카테고리의 다른 글
  • [JAVA] 전략 패턴(Strategy Pattern)
  • [JAVA] 어댑터 패턴(Adapter Pattern)
  • [JAVA] 콜백 메서드란?
  • [JAVA] 디자인 패턴(Design Pattern)
junhyeokkk
junhyeokkk
나의 개발자 성장기
  • junhyeokkk
    백엔드 개발자 준혁의 성장일지
    junhyeokkk
  • 전체
    오늘
    어제
    • 분류 전체보기 (59)
      • Flutter (13)
      • 개발환경구축 (3)
      • HTTP (0)
      • CS지식 (5)
      • 코딩테스트 (10)
      • JAVA (7)
      • 데이터베이스 (7)
      • Node.js (9)
      • TypeScript (1)
      • Azure (3)
      • Git (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    azure
    백엔드개발
    nodejs
    db
    CS지식
    MSsql
    알고리즘
    cosmos db
    데이터베이스
    Flutter
    디자인패턴
    자바
    node
    개발자준비
    프로그래머스
    라이브러리
    programmers
    node.js
    sql튜토리얼
    마이크로소프트sql
    Microsoft
    RDBMS
    백엔드개발자
    Java
    Typescript
    코딩테스트
    DART
    백엔드
    js
    개발자
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
junhyeokkk
[JAVA] 싱글톤 패턴(Singleton Pattern)
상단으로

티스토리툴바