🖋️ 싱글톤과 정적 메서드 비교
Static Method (무상태 유틸리티 함수)
상태 비저장
- 한 호출에서 다른 호출까지 어떤 상태도 유지 X
- 클래스 인스턴스의 상태와는 독립적으로 작동
액세스
- 클래스 인스턴스가 아닌 클래스 자체에서 직접 액세스
- 정적 메서드를 사용하기 위해 클래스에서 개체를 만들 필요 없음
인스턴스 값
- 정적 메서드는 클래스 인스턴스에서 작동 불가
- 인스턴스 값(예: 비정적 속성 또는 메서드)에 직접 액세스 불가능
- 정적 속성에만 액세스
public class MathUtils {
public static int add(int a, int b) {
return a + b;
}
public static int multiply(int a, int b) {
return a * b;
}
}
int sum = MathUtils.add(5, 3);
int product = MathUtils.multiply(4, 2);
System.out.println("Sum: " + sum);
System.out.println("Product: " + product);
싱글톤 (단 하나의 상태를 전역 관리)
상태 저장
- 싱글톤은 상태를 유지
- 애플리케이션의 수명 주기 전체에 걸쳐 싱글톤 클래스의 인스턴스는 하나만 있으므로 애플리케이션의 여러 부분에서 지속되는 상태를 유지하고 수정
제어된 액세스
- 인스턴스가 하나만 생성되도록 하는 정적 메서드를 통해 개체 생성을 제어
- 그런 다음 이 단일 인스턴스를 사용하여 인스턴스와 관련된 함수 및 값에 액세스
인스턴스 값
- 정적 메서드와 달리 싱글톤은 인스턴스 메서드(비정적 메서드)와 싱글톤의 상태에서 작동할 수 있는 속성 가질 수 있음
- 이러한 메서드는 싱글톤 인스턴스의 내부 상태를 수정 가능
public class DatabaseConnection {
private static DatabaseConnection instance;
private String connectionString;
private DatabaseConnection(String connStr) {
this.connectionString = connStr;
}
public static DatabaseConnection getInstance(String connStr) {
if (instance == null) {
instance = new DatabaseConnection(connStr);
}
return instance;
}
public void connect() {
System.out.println("Connecting to database with connection string: " + connectionString);
}
}
DatabaseConnection dbConn1 = DatabaseConnection.getInstance("jdbc:mysql://localhost:3306/myDb");
dbConn1.connect();
DatabaseConnection dbConn2 = DatabaseConnection.getInstance("jdbc:mysql://localhost:3306/anotherDb");
dbConn2.connect();
System.out.println(dbConn1 == dbConn2);