[디자인패턴][생성][싱글톤 패턴]

SEUNGJUN·2024년 1월 19일

싱글톤 패턴이란

어떤 클래스가 최대 한 번의 인스턴스를 가지고, 그 인스턴스에 대한 전역적인 접근을 제공하는 디자인 패턴으로, 이 패턴을 사용하면 어플리케이션 내에서 해당 클래스의 인스턴스가 오직 하나 뿐이고, 그 인스턴스에 대한 접근은 어디서든지 가능하다.

인스턴스 (Instance)?

인스턴스는 객체 지향 프로그래밍에서 클래스의 구조를 바탕으로 실제로 메모리에 할당된 개별적인 실체를 나타낸다. 여러 클래스를 정의하고 있다고 할때, 각 클래스로부터 생성된 실제 데이터를 갖는 것이 인스턴스이다. 예로 자동차 클래스가 있다면 실제 생성되는 자동차는 산타페, 봉고차가 실제 인스턴스가 된다.

// 자동차 클래스 정의
public class Car {
    String model;
    String carNumber;
}

// Car 클래스를 기반으로 한 인스턴스 생성
Car myCar = new Car();
myCar.model = "소나타";
myCar.carNumber = "23가 1234";

로그 기록 싱글톤 패턴

public class Logger {

    private static Logger instance;
    private StringBuilder logBuffer;

    // private 생성자로 외부에서 인스턴스 생성을 막음
    private Logger() {
        logBuffer = new StringBuilder();
    }

    // 싱글톤 인스턴스 얻기
    public static Logger getInstance() {
        if (instance == null) {
            instance = new Logger();
        }
        return instance;
    }

    // 로그 추가 메서드
    public void log(String message) {
        logBuffer.append(message).append("\n");
    }

    // 현재 로그 출력 메서드
    public void printLog() {
        System.out.println(logBuffer.toString());
    }
}

public class Example {

    public static void main(String[] args) {
        // Logger 싱글톤 인스턴스 얻기
        Logger logger = Logger.getInstance();

        // 로그 추가
        logger.log("프로그램 시작");

        // 다른 부분에서도 같은 로거 인스턴스를 이용하여 로그 추가
        someOtherMethod();

        // 현재까지의 로그 출력
        logger.printLog();
    }

    public static void someOtherMethod() {
        // 다른 메서드에서도 같은 로거 인스턴스를 이용하여 로그 추가
        Logger logger = Logger.getInstance();
        logger.log("다른 메서드에서 로그 추가");
    }
}

- Logger 클래스는 싱글톤 패턴을 적용하여 프로그램 내에서 단 하나의 로그 기록 객체를 유지한다. log 메서드를 통해서 로그를 추가하고, printLog 메서드를 통해 현재까지 로그를 출력할수가 있다.

- Example 클래스에서 Logger의 싱글톤 인스턴스를 얻어와서 로그를 추가하고 다른 메서드인 someOtherMethod에서도 log 객체를 사용하여 기록을 추가할수가 있다. 최종적으로 Logger인스턴스는 하나이고, 어디에서든지 동일한 log공간에 기록을 남길수가 있게 되는 것이다.

profile
RECORD DEVELOPER

0개의 댓글