Java

[Java] 싱글톤 패턴

Castle Bird 2025. 11. 18. 00:21

1. 싱글톤이란?

특정 클래스의 인스턴스(객체)가 애플리케이션 전체에서 오직 하나만 생성되도록 보장하는 디자인 패턴.

  • 생성자를 private으로 선언해서 외부에서 객체를 직접 만들 수 없도록 막음
  • 클래스 내에 static 변수로 유일 객체를 저장함
  • static 메서드를 통해 전역에서 동일 객체에 접근

 

싱글톤의 목적

  • 데이터베이스 커넥션 풀, 설정 객체 등 시스템 자원을 공유해야 하는 상황에서 객체가 여러 번 생성되는 것을 방지하고 하나만 생성해 메모리 낭비를 막음
  • 전역적으로 일관된 객체를 사용할 수 있음

 

코드로 같이 알아보자
아래와 같은 싱글톤 패턴의 예시 코드가 있다. 하나 씩 같이 보자

class Singleton {

    private static Singleton instance = new Singleton();

    private Singleton() {}  // 외부에서 객체 생성 불가

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

// 사용 예시
Singleton s = Singleton.getInstance();

 

위 코드의 실행 순서를 따져보자.
컴퓨터 메모리에 Java코드가 실행되는 상황을 이미지로 그려보았다. (구글 시트 사용)

출처 : 나

그림의 1) ~ 3) 순서로 보면된다.

  • private static Singleton instance = new Singleton(); 이 코드가 실행되면,
    • Singleton 객체가 힙(Heap) 영역에 생성. 주소 위치는 예시로 0x12345라 칭함
    • 해당 객체의 주소(참조값)는 메서드 영역(Method area)에 위치한 static 변수(instance)에 저장.
    • 즉, static 변수는 클래스 당 하나만 존재하며, 전역적으로 동일한 객체를 가리키게 된다.
  • public static Singleton getInstance()
    • 메서드 영역(Method area)에 올라가게 된다.
    • 호출 시 instance 변수를 반환해서, 항상 같은 Singleton 객체를 참조하게 된다.
  • private Singleton()
    • 생성자를 private으로 선언하여 외부에서 객체를 추가로 생성하지 못하도록 막는다.
    • 이에 따라 Singleton 객체는 오직 하나만 힙 영역에 생성.

 

📝

이렇게 Singletone패턴이란 자주 호출되는 객체를 단 한 번만 생성시켜 메모리 누수, 성능 저하를 막는 코드 디자인 패턴이다.

'Java' 카테고리의 다른 글

[Java] Spring의 탄생 배경  (0) 2025.12.11
[Java] HashSet  (0) 2025.12.07
[Java] Stream - map과 flatMap  (0) 2025.11.26
[Java] 단일 책임 원칙(SRP)과 개방-폐쇄 원칙(OCP)  (0) 2025.11.25
[Java/Set] HashSet, LinkedHashSet, TreeSet  (0) 2025.10.21