그알것 — 그럼에도 알아야 할 것들
홈질문커뮤니티
로그인
그알것 — 그럼에도 알아야 할 것들

Service

  • 홈
  • 소개
  • 질문
  • 커뮤니티

My

  • 내 워크스페이스
  • 저장한 질문
  • 작성한 답변

Policy

  • 이용약관
  • 개인정보처리방침
  • 문의

© 2026 그알것 · What Still Matters

질문 목록Architecture
Architecture

싱글턴 패턴이란 무엇이며 장단점은 무엇인가요?

실무4/5
설계4/5
인간4/5
기초2/5

면접관의 질문 의도

정의를 외웠는지가 아니라 전역 상태·테스트 격리·DI 환경에서의 위치까지 같이 보는지를 가르려는 질문이다.

큐레이션 답변

학습 자료

싱글턴은 클래스 인스턴스를 하나로 강제하고 전역 접근점을 제공하는 패턴이다. 객체 생성을 막아 자원 공유와 접근 편의를 얻지만, 그 대가로 전역 상태가 생기고 호출부가 구체 타입에 직접 묶인다. 결국 "하나만 있어야 하는가"보다 "누구의 책임이고 어떻게 갈아끼울 수 있는가"가 더 중요한 결정이 된다.

좋은 답변 구조

  1. 01싱글턴의 정의와 "인스턴스를 하나로 강제한다"는 핵심 동작을 짚는다
  2. 02자원 공유·전역 접근이라는 장점을 구체 사례와 함께 설명한다
  3. 03전역 상태, 테스트 격리 어려움, 숨은 결합도라는 단점을 정리한다
  4. 04DI 컨테이너 환경에서는 직접 구현 대신 빈 스코프로 대체하는 기준으로 마무리한다

자주 실수하는 포인트

전역 접근의 편의만 보고 모든 공용 객체에 기본 선택으로 쓴다
DCL/지연 초기화에서 `volatile` 누락 같은 메모리 가시성 문제를 놓친다
테스트 간 내부 상태를 리셋하지 않아 테스트 순서에 따라 결과가 갈린다
스프링 빈도 결국 싱글턴이므로 직접 `getInstance()`를 또 만든다

실무 맥락

  • DB 커넥션 풀, HTTP 클라이언트처럼 비용이 큰 자원을 애플리케이션 전체에서 공유해야 하는 환경
  • 스프링/구아이스 같은 DI 컨테이너가 이미 빈 스코프로 단일 인스턴스를 보장하는 환경
  • 테스트마다 내부 캐시·플래그를 초기화해야 결과가 안정되는 단위 테스트 환경
  • OSGi·플러그인·여러 클래스로더가 공존해 "진짜 하나"가 깨질 수 있는 환경

본인 경험에 녹이는 힌트

싱글턴 객체에 들고 있던 캐시/플래그 때문에 테스트가 순서에 따라 깨졌던 경험이 있다면 격리 전략과 연결할 수 있다

직접 구현하던 싱글턴을 스프링 빈으로 옮기면서 `getInstance()` 호출을 걷어낸 경험을 결합도 이야기로 풀 수 있다

지연 초기화에서 동시성 버그를 만나 DCL이나 `enum`/Initialization-on-demand 홀더로 갈아치운 과정을 설계 판단 근거로 쓸 수 있다

전역으로 굳어진 클라이언트를 인터페이스로 분리해 테스트에서 페이크로 대체했던 경험을 의존성 역전 사례로 엮을 수 있다

커뮤니티 인기 답변

전체 0개

아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.

관련 꼬리 질문

Q1스프링 빈의 싱글턴 스코프와 GoF 싱글턴 패턴은 어떤 점에서 같고 어떤 점에서 다른가요
Q2Double-Checked Locking에서 `volatile`이 빠지면 어떤 문제가 생기나요
Q3싱글턴이 결합도를 높인다고 할 때, 의존성 주입은 그 문제를 어떻게 풀어주나요
Q4멀티 클래스로더나 직렬화 환경에서 싱글턴이 깨지는 경우를 설명해 주세요
아직 답을 쓰지 않았어요.
큐레이션 답변과 다른 사람 답변을 보고, 자기 언어로 답을 정리해보면 학습 효과가 가장 큽니다.
목차
  • 01면접관의 질문 의도
  • 02큐레이션 답변
  • 03좋은 답변 구조
  • 04자주 실수하는 포인트
  • 05실무 맥락
  • 06본인 경험에 녹이는 힌트
  • 07커뮤니티 인기 답변준비중
  • 08관련 꼬리 질문