Java 싱글톤(Singleton) 패턴 - 인스턴스를 하나만 만드는 방법

코딩Java
읽는데 5분 소요
처음 쓰여진 날: 2026-02-17
마지막 수정일: 2026-02-17
조회수: 1

요약

Java 싱글톤(Singleton) 패턴의 개념과 동작 원리를 알아봅니다. static 변수로 인스턴스를 관리하고, 같은 객체를 공유하는 원리를 정보처리기사 실기 기출문제와 함께 정리합니다.

싱글톤 패턴 핵심 정리

개념설명예시
싱글톤 패턴클래스의 인스턴스가 하나만 생성되도록 보장Gamja.get()
static 변수클래스에 하나만 존재하는 공유 변수static private Gamja instance
같은 객체 참조여러 변수가 동일한 인스턴스를 가리킴s1, s2, s3 모두 같은 객체
private 생성자외부에서 new로 직접 생성하지 못하게 막음private Gamja() { }

싱글톤 패턴이란?

싱글톤(Singleton) 패턴 은 클래스의 인스턴스(객체)가 오직 하나만 생성되도록 보장하는 디자인 패턴입니다.

쉽게 말하면, "이 클래스로 만들 수 있는 객체는 딱 하나뿐" 이라는 규칙입니다.

java
코드 하이라이팅 중...

왜 하나만 만들까?

프린터, 설정 파일, 데이터베이스 연결처럼 하나만 있어야 하는 것들이 있습니다. 객체가 여러 개 만들어지면 충돌이 생길 수 있기 때문입니다.


싱글톤 패턴 구조

기출문제에 출제된 싱글톤 패턴의 구조를 살펴보겠습니다.

java
코드 하이라이팅 중...

핵심 요소 3가지

요소코드역할
static 변수static private Gamja instance = null;유일한 인스턴스를 저장하는 공간
static 메서드static public Gamja get() { ... }인스턴스를 반환 (없으면 생성, 있으면 기존 반환)
조건 검사if (instance == null)이미 만든 적 있는지 확인


get() 메서드 동작 원리

get() 메서드는 처음 호출할 때만 객체를 생성하고, 이후에는 기존 객체를 반환합니다.

처음 호출할 때 (instance == null)

java
코드 하이라이팅 중...
  1. instancenull인지 확인 -> null이다 (아직 객체를 만든 적 없음)
  2. instance = new Gamja(); -> 새 객체를 생성하여 instance에 저장
  3. return instance; -> 새로 만든 객체를 반환
  4. s1이 이 객체를 가리킴

두 번째 이후 호출할 때 (instance != null)

java
코드 하이라이팅 중...
  1. instancenull인지 확인 -> null이 아니다 (이미 객체가 있음)
  2. if 블록을 건너뜀 (새 객체를 만들지 않음)
  3. return instance; -> 기존 객체를 그대로 반환
  4. s2s1과 같은 객체를 가리킴
text
코드 하이라이팅 중...

기출문제 풀어보기

21년 3회 기출 코드

java
코드 하이라이팅 중...

단계별 실행 추적

순서코드instancecount설명
1s1 = Gamja.get()새 객체 생성0null이므로 새로 만듦
2s1.count()-1count 1 증가
3s2 = Gamja.get()기존 객체 반환1null이 아니므로 기존 반환
4s2.count()-2같은 객체의 count 1 증가
5s3 = Gamja.get()기존 객체 반환2null이 아니므로 기존 반환
6s3.count()-3같은 객체의 count 1 증가
7s1.getCount()-3s1도 같은 객체이므로 3 반환

출력: 3

핵심 포인트

s1, s2, s3는 모두 같은 Gamja 객체를 참조합니다. 따라서 어떤 변수로 count()를 호출해도 같은 count 변수가 증가합니다.

만약 싱글톤이 아니었다면 (매번 new Gamja()로 새 객체를 만들었다면), 각 객체마다 count가 따로 있어서 결과는 1이 됩니다.

패턴s1.counts2.counts3.counts1.getCount()
싱글톤 (같은 객체)1233
일반 (각각 다른 객체)1111

시험 풀이 전략

싱글톤 패턴 확인하는 방법

코드에서 다음 3가지가 보이면 싱글톤 패턴입니다.

  1. static 변수에 자기 자신 타입 저장: static private Gamja instance
  2. null 검사 후 생성: if (instance == null) instance = new Gamja();
  3. static 메서드로 반환: static public Gamja get() { return instance; }

풀이 순서

  1. 싱글톤 패턴임을 확인 -> 모든 변수가 같은 객체를 참조
  2. get() 호출마다 같은 객체가 반환됨을 인지
  3. count++ 같은 연산이 누적됨을 추적
  4. 최종 getCount()는 누적된 값을 반환

정보처리기사 실기 기출 문제