Java에서 하나의 공통 자원을 공유하려 할 때 static 키워드와 Singleton 패턴은 자주 비교됩니다.
두 방식은 비슷해 보이지만, 메모리 처리, 객체화 여부, 유지보수성에서 큰 차이가 있습니다.
이 글에서는 두 개념의 본질적인 차이와 언제 어떤 방식이 적합한지를 명확히 정리해드립니다.
✅ static이란?
- 클래스 로딩 시 Method Area에 한번만 할당
- 객체 생성 없이 클래스명으로 직접 접근 가능
- 공통 유틸리티나 상수 정의에 적합
public class Util {
public static int add(int a, int b) {
return a + b;
}
}
Util.add(3, 5); // 객체 없이 바로 사용
✅ Singleton이란?
Singleton 구현 방식은 내 블로그 - Java Singleton 패턴 설명 포스트를 참고해주세요.
- 객체를 하나만 생성하도록 보장하는 디자인 패턴
- 지연 생성(Lazy Initialization) 가능
- 상태를 유지할 수 있으며, 다형성 사용 가능
🧠 static vs Singleton 비교
| 생성 시점 | 클래스 로딩 시 | 필요할 때 (Lazy 가능) |
| 메모리 위치 | Method Area | Heap |
| 객체화 여부 | ❌ (객체 없음) | ✅ (객체 존재) |
| 상태 관리 | 불가능 (stateless) | 가능 (stateful) |
| 테스트 용이성 | 어렵다 (전역처럼 작동) | 비교적 쉬움 (Mock 객체 가능) |
| 다형성 | 불가능 | 가능 (인터페이스 구현 등) |
✅ 언제 static을 쓰고 언제 Singleton을 써야 할까?
🔹 static이 적합한 경우
- 상태가 필요 없는 순수 유틸성 로직
- 계산기능, 공통 상수, 로그 포맷 등
🔹 Singleton이 적합한 경우
- 상태 저장이 필요한 공용 객체
- 의존성 주입이 필요한 서비스, DB 연결 등
🎯 결론
- static: 단순하고 빠르지만 유연하지 않음
- Singleton: 설계는 복잡하지만 유연성과 확장성이 좋음
상황에 맞는 선택이 유지보수성과 테스트 효율성을 크게 좌우합니다.
'Programming > Design Pattern' 카테고리의 다른 글
| ✅ PRG(Post-Redirect-Get) 패턴 – 새로고침 중복방지와 공유 가능한 웹 설계의 핵심 (1) | 2022.10.31 |
|---|---|
| ✅ [프록시 패턴 완벽 이해] 프록시 서버부터 UML, 활용 사례까지 총정리! (0) | 2022.10.30 |
| ✅ [MVC 패턴 완벽 정리] 모델-뷰-컨트롤러 쉽게 이해하기 (쇼핑리스트 예제 포함) (1) | 2022.10.29 |
| 👉 자바 싱글톤 패턴(Singleton) 개념과 구현 예제 – 객체 하나만 생성하는 이유와 주의점 정리 (0) | 2022.10.29 |