Programming/etc

디자인 패턴(design pattern)

esoog Polaris 2023. 6. 24. 15:15
반응형

# 디자인 패턴

 

소프트웨어 개발에서 자주 나타나는 문제를 해결하기 위한 일반적인 해결책입니다. 다양한 디자인 패턴이 있지만, 여기서는 몇 가지 대표적인 디자인 패턴을 나열하고 간단한 예시 코드를 제공하겠습니다.

1. Singleton Pattern (싱글턴 패턴):
   - 목적: 클래스의 인스턴스가 하나만 생성되고, 전역적인 접근점을 제공하는 패턴입니다.
   - 예시 코드:

 

public class Singleton {
    private static Singleton instance;
    private Singleton() { }
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}





2. Observer Pattern (옵서버 패턴):
   - 목적: 객체 사이에 일대다 관계를 정의하여 한 객체의 상태 변경 시 다른 객체들에게 자동으로 알립니다.
   - 예시 코드:

 

import java.util.ArrayList;
import java.util.List;

public interface Observer {
    void update();
}

public class Subject {
    private List<Observer> observers = new ArrayList<>();
    private int state;

    public int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
        notifyObservers();
    }

    public void attach(Observer observer) {
        observers.add(observer);
    }

    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update();
        }
    }
}

public class ConcreteObserver implements Observer {
    private Subject subject;

    public ConcreteObserver(Subject subject) {
        this.subject = subject;
        subject.attach(this);
    }

    @Override
    public void update() {
        System.out.println("State changed: " + subject.getState());
    }
}





3. Factory Method Pattern (팩토리 메서드 패턴):
   - 목적: 객체를 생성하는 인터페이스를 정의하고, 서브 클래스에서 어떤 클래스의 인스턴스를 생성할지 결정하도록 합니다.
   - 예시 코드:

 

public interface Product {
    void use();
}

public class ConcreteProduct implements Product {
    @Override
    public void use() {
        System.out.println("Using ConcreteProduct");
    }
}

public abstract class Creator {
    public abstract Product createProduct();
    public void someOperation() {
        Product product = createProduct();
        product.use();
    }
}

public class ConcreteCreator extends Creator {
    @Override
    public Product createProduct() {
        return new ConcreteProduct();
    }
}



위의 예시 코드는 각 디자인 패턴의 기본적인 구조와 개념을 보여주는 간단한 예시입니다. 디자인 패턴은 실제 프로젝트에서 적용되는 상황과 요구사항에 따라 다양하게 응용될 수 있으며, 구체적인 구현 방법은 패턴의 종류와 상황에 따라 다를 수 있습니다.

728x90