Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- MYSQL
- Spring Batch
- scrapy
- 젠킨스
- 자바 패턴
- Spring
- IntelliJ
- AES256
- docker
- python
- 자바패턴
- 미국 배당주
- 미국주식
- 티스토리 광고 수익
- 구글 애드센스 수익
- Spring Batch 강의
- Python 기본편
- Vue 알아보기
- spring Annotation
- JDK1.3
- Vue 강의
- spring boot 시작
- Vue 배우기
- 도커
- 주식용어
- docker mysql
- docker 명령어
- gradle
- python 기초
- intelliJ plugin
Archives
나만의공간
🧱 1. 싱글턴 패턴이란? 본문
✅ 목적:
하나의 클래스에 대해 오직 하나의 인스턴스만 존재하도록 보장하고,
어디서든 전역으로 접근 가능하게 만드는 패턴입니다.
📌 2. 언제 사용하나요?
- 설정 클래스 (Config)
- 로깅, 캐시, 데이터베이스 연결 객체
- 공유 리소스를 관리할 때
🚫 예를 들어 볼게요:
Logger log1 = new Logger();
Logger log2 = new Logger();
log1.write("Hello");
log2.read(); // log1과 log2는 서로 다른 인스턴스니까 데이터 공유 안됨!
→ 로그가 따로 관리되면 안 되니까 하나의 Logger 인스턴스만 쓰게 만들어야 해요!
🎯 싱글턴 구현 핵심 포인트
- 생성자를 private으로 막기
- 내부에서 자기 자신을 static으로 한 번만 생성
- public static 메서드로 외부에서 접근하게 만들기
🔧 3. 실무형 자바 예제 (Thread-safe 버전)
public class AppConfig {
// 1. static으로 유일한 인스턴스를 선언 (volatile: 메모리 동기화 보장)
private static volatile AppConfig instance;
// 2. private 생성자: 외부에서 생성 못 하게
private AppConfig() {
// 초기 설정 로딩 등
System.out.println("AppConfig 인스턴스 생성됨");
}
// 3. synchronized + double-check 로 thread-safe 구현
public static AppConfig getInstance() {
if (instance == null) {
synchronized (AppConfig.class) {
if (instance == null) {
instance = new AppConfig();
}
}
}
return instance;
}
// 예시 메서드
public void printConfig() {
System.out.println("설정 출력: 시스템 설정 값");
}
}
📁 사용 코드 예:
public class Main {
public static void main(String[] args) {
AppConfig config1 = AppConfig.getInstance();
AppConfig config2 = AppConfig.getInstance();
config1.printConfig();
System.out.println("동일 인스턴스 여부: " + (config1 == config2)); // true
}
}
✅ 실행 결과
AppConfig 인스턴스 생성됨
설정 출력: 시스템 설정 값
동일 인스턴스 여부: true
→ 두 객체는 실제로 같은 인스턴스입니다.
💡 실무 팁
방법특징스레드 안전사용 추천
Eager Initialization | 미리 만들어 둠 | O | 단순할 때 |
Lazy Initialization | 사용할 때 생성 | X | X |
synchronized | 안전하지만 느림 | O | O (작은 앱) |
Double-checked locking (volatile) | 안전 + 빠름 | O | ✅ 실무에서 많이 사용 |
Enum 방식 | 가장 안전 | O | ✅ 강력 추천 |
🚀 보너스: 가장 강력한 방식 (Enum 싱글턴)
public enum GlobalConfig {
INSTANCE;
public void printConfig() {
System.out.println("Enum 방식 싱글턴 설정 출력");
}
}
// 사용
GlobalConfig.INSTANCE.printConfig();
- 자바가 Enum 은 직렬화, 리플렉션 우회도 막아줌
- 거의 완벽한 싱글턴 보장 → 실무에서는 이 방식도 많이 써요
🎓 마무리 요약
싱글턴 장점싱글턴 단점
인스턴스 재사용으로 성능 ↑ | 테스트 어려움 (의존성 주입 불편) |
전역 접근 가능 | 전역 상태 남용 위험 |
자원 관리 쉬움 | 너무 많이 쓰면 코드 결합도 ↑ |
'IT > JAVA' 카테고리의 다른 글
🧱 1. 브리지 패턴이란? (1) | 2025.05.31 |
---|---|
🧱 1. 어댑터 패턴이란? (0) | 2025.05.31 |
🧱 1. 프로토타입 패턴이란? (0) | 2025.05.30 |
🧱 자바 디자인 패턴 - 빌더 패턴 완전 정복 (0) | 2025.05.30 |
🧱 추상 팩토리 패턴(Abstract Factory Pattern) – 제품군을 세트로 만들고 싶을 때! (0) | 2025.05.30 |
Comments