싱글턴(Singleton) : 인스턴스를 오직 하나만 생성할 수 있는 클래스
싱글턴 패턴 : 특정 클래스의 인스턴스가 오직 하나만 생성되어서 전역적으로 접근 가능하도록 보장하는 패턴이다.
이 패턴은 전역 상태를 관리하거나, 자원 관리, 로깅, 드라이버 객체 등 한 번의 인스턴스 생성으로 충분한 경우에 주로 사용된다.
싱글턴을 만드는 방식은 크게 2가지가 있다.
1. Private 생성자를 이용한 방식
2. Enum(열거형)을 이용한 방식
열거 타입을 이용한 방식의 예시 :
public enum Singleton {
INSTANCE;
public void doSomething() {
// 싱글턴 인스턴스가 할 작업 구현
}
}
더 자세한 예시 :
public enum DatabaseConnection {
INSTANCE; // Enum 싱글턴의 인스턴스 선언. JVM은 이 인스턴스를 유일하게 관리합니다.
private Connection connection; // 데이터베이스 연결 객체를 저장할 변수.
// Enum의 생성자. Enum 인스턴스가 생성될 때 (즉, JVM이 시작할 때) 한 번만 호출됩니다.
DatabaseConnection() {
// 여기에서 데이터베이스 연결을 설정합니다. 실제 환경에서는 이 부분에
// 데이터베이스 연결을 위한 JDBC URL, 사용자 이름 및 비밀번호 등이 포함됩니다.
try {
// DriverManager.getConnection을 사용하여 데이터베이스 연결을 초기화합니다.
// 이 예제에서는 연결 정보를 가정하고 있으며, 실제 정보로 대체해야 합니다.
this.connection = DriverManager.getConnection("jdbc:yourDatabaseUrl", "username", "password");
} catch (SQLException e) {
// 데이터베이스 연결 설정 중 예외가 발생한 경우, 예외를 던집니다.
// 이를 통해 초기화 실패를 알리고, 애플리케이션 시작을 중단할 수 있습니다.
throw new RuntimeException("Database connection setup failed", e);
}
}
// 데이터베이스 연결 객체를 반환하는 메서드.
// 이 메서드를 통해 어디서든 데이터베이스 연결을 사용할 수 있습니다.
public Connection getConnection() {
return this.connection;
}
// 데이터베이스 연결을 안전하게 닫는 메서드.
// 애플리케이션 종료 시 또는 더 이상 데이터베이스 연결이 필요 없을 때 호출합니다.
public void closeConnection() {
if (this.connection != null) {
try {
this.connection.close();
} catch (SQLException e) {
// 연결 닫기 시도 중 예외 처리.
// 예외 처리 로직에 따라 로깅 또는 다른 조치를 취할 수 있습니다.
}
}
}
}
결론 : 대부분의 상황에서는 원소가 하나뿐인 열거 타입이 싱글턴을 만드는 가장 좋은 방법이다.
'이펙티브 자바' 카테고리의 다른 글
[이펙티브 자바] 아이템 6. 불필요한 객체 생성을 피하라 (0) | 2024.03.11 |
---|---|
[이펙티브 자바] 아이템 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2024.03.11 |
[이펙티브 자바] 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라 (0) | 2024.03.11 |
[이펙티브 자바] 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2024.03.11 |
[이펙티브 자바] 아이템 1. 생성자 대신 정적 팩토리 메서드를 고려하라 (0) | 2024.03.11 |