//TodoService 객체가 하나가 생성됨
public enum TodoService {
INSTANCE;
}
이렇게하면 객체 하나만 생성이라고 하는데 맞아? 맞으면 객체 여러개 생성은 어떻게 해야해 ?
INSTANCE 하나만 존재하기 때문에 객체가 하나만 생성돼.
이런 방식은 싱글톤 패턴을 구현하는 방법 중 하나야.
✅ enum을 이용한 싱글톤 패턴
public enum TodoService { INSTANCE; // 유일한 객체 // 서비스 메서드 추가 가능 public void doSomething() { System.out.println("Doing something..."); } }
💡 특징:
- INSTANCE라는 유일한 객체가 자동으로 생성됨.
- private 생성자가 자동 적용돼서 외부에서 객체를 새로 만들 수 없음.
- 자바에서 권장하는 싱글톤 방식(Reflection, 직렬화/역직렬화 문제 해결).
📌 사용법
TodoService service1 = TodoService.INSTANCE;
TodoService service2 = TodoService.INSTANCE;
System.out.println(service1 == service2); // true (같은 객체)
❌ 객체 여러 개 생성하는 방법
싱글톤이 아니라 새로운 객체를 여러 개 만들고 싶다면 enum을 사용하면 안 돼.
대신 클래스로 만들고, new 키워드를 허용하면 돼.
✅ 일반 클래스로 여러 객체 생성하기
public class TodoService {
public TodoService() {
// 생성자 공개
} public void doSomething() { System.out.println("Doing something...");
}
}
📌 사용법
TodoService service1 = new TodoService();
TodoService service2 = new TodoService();
System.out.println(service1 == service2); // false (다른 객체)
- enum → 싱글톤 (객체 1개만 생성)
- class → 새로운 객체 여러 개 생성 가능
🎯 언제 어떤 걸 써야 할까?
구분enum 싱글톤일반 클래스
객체 개수 | 1개 (싱글톤) | 여러 개 가능 |
안전성 | Reflection, 직렬화 문제 없음 | 추가적인 싱글톤 처리 필요 |
Thread-safe | 기본적으로 안전 | 추가 작업 필요 (synchronized 등) |
상속 가능 여부 | ❌ 불가능 | ✅ 가능 |
사용 사례 | - 설정 관리 (ConfigManager) - 로깅 (Logger) - 데이터베이스 연결 풀 (DBConnectionPool) |
- DAO (Data Access Object) - 사용자별 서비스 객체 - HTTP 요청마다 새로운 서비스 객체 |
✅ 결론
- 객체를 하나만 유지하고 싶다면? → enum 싱글톤 (INSTANCE) 사용
- 여러 개의 객체가 필요하거나 상속이 필요하다면? → 일반 클래스 사용
'언어 > JAVA' 카테고리의 다른 글
[의문] x != null 쓰는 이유 (0) | 2025.04.14 |
---|---|
Controller - JSP 구조 이해 (0) | 2025.03.31 |
DTO (Data Transfer Object) (0) | 2025.03.31 |
(작성중) 자바 웹 개발 워크북 - 1장 웹 프로그래밍의 시작 (0) | 2025.03.31 |