싱글톤 패턴

hoon·2025년 1월 13일

JAVA

목록 보기
5/21

싱글톤 패턴 예제: 회사(Company)

public class Company {

    // static으로 단일 인스턴스 생성
    private static Company instance;

    // private 생성자: 외부에서 객체 생성 불가
    private Company() {}

    // 인스턴스 반환 메서드
    public static Company getInstance() {
        if (instance == null) { // 처음 호출 시 인스턴스 생성
            instance = new Company();
        }
        return instance; // 이후 호출 시 기존 인스턴스 반환
    }

    // 예제 메서드
    public void showInfo() {
        System.out.println("이 객체는 유일한 회사 인스턴스입니다.");
    }
}

사용 방법

public class Main {
    public static void main(String[] args) {
        // 회사 객체 가져오기
        Company company1 = Company.getInstance();
        Company company2 = Company.getInstance();

        // 두 객체가 같은지 확인
        System.out.println(company1 == company2); // 출력: true

        // 메서드 호출
        company1.showInfo(); // 출력: 이 객체는 유일한 회사 인스턴스입니다.
    }
}

핵심 특징

  1. 유일한 회사 객체:
    • Company 클래스는 회사 객체를 하나만 생성하도록 보장.
    • getInstance()를 호출할 때 항상 동일한 객체를 반환.
  2. 현실적 의미:
    • 회사는 여러 개의 인스턴스를 가질 필요가 없으므로, 싱글톤 패턴으로 관리.
    • 다른 클래스나 코드에서 동일한 회사 객체를 참조 가능.

싱글톤 패턴에서 객체를 하나만 생성하는 이유는 다음과 같이 현실적인 문제와 효율성을 해결하기 위해서이다.


1. 자원의 효율적 관리

  • 불필요한 객체 생성을 방지:
    • 객체를 여러 개 생성하면 메모리와 CPU 자원을 낭비하게 된다.
    • 특히, 객체가 많은 자원을 소비하거나 초기화 비용이 큰 경우(예: 데이터베이스 연결, 설정 파일 로드 등) 하나의 객체만 사용해 효율성을 높인다.

2. 데이터의 일관성 유지

  • 공유 자원의 관리:
    • 예를 들어, 회사 정보나 환경 설정 등 모든 사용자와 코드에서 공통으로 사용해야 하는 데이터는 하나의 객체로 관리해야 데이터의 일관성이 유지된다.
    • 객체를 여러 개 생성하면 서로 다른 상태를 가질 수 있어 혼란을 초래할 수 있다.

3. 전역 접근점 제공

  • 어디서든 동일한 객체 사용 가능:
    • 싱글톤 객체를 통해 코드 어디서든 동일한 객체에 접근할 수 있다.

    • 예: 로깅 시스템, 설정 관리 클래스, 프린터 스풀러 등.

      Logger logger = Logger.getInstance();
      logger.log("Application started");
      

4. 현실적 모델링

  • 현실 세계의 고유 개체를 표현:
    • 현실에서 고유한 개체는 하나만 존재해야 한다.
      • 예: 하나의 회사(Company), 하나의 데이터베이스 연결(Database Connection), 하나의 OS 프린터 스풀러(Printer Spooler).
    • 이런 개념은 싱글톤으로 모델링하면 적합하다.

예시 상황

  1. 회사 객체 (Company):
    • 회사는 고유한 존재이므로 여러 개를 생성할 필요가 없다.
    • 하나의 객체만 생성하여 모든 클래스가 같은 회사 정보를 참조.
  2. 데이터베이스 연결 (Database Connection):
    • 데이터베이스는 연결이 하나만 유지되도록 관리해야 한다.
    • 여러 개의 연결 객체를 생성하면 리소스를 낭비하고 충돌이 발생할 가능성이 있다.
  3. 환경 설정 (Configuration):
    • 애플리케이션의 설정 값을 담는 클래스는 싱글톤으로 만들어야 모든 클래스가 동일한 설정을 사용한다.

결론

  • 싱글톤 패턴의 핵심 이유:
    1. 자원 낭비 방지.
    2. 데이터 일관성 보장.
    3. 전역 접근점 제공.
    4. 현실적 고유 개체 모델링.

객체를 하나로 제한함으로써 프로그램의 안정성과 효율성을 높일 수 있다.

0개의 댓글