반응형
# 디자인 패턴
소프트웨어 개발에서 자주 나타나는 문제를 해결하기 위한 일반적인 해결책입니다. 다양한 디자인 패턴이 있지만, 여기서는 몇 가지 대표적인 디자인 패턴을 나열하고 간단한 예시 코드를 제공하겠습니다.
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
'Programming > etc' 카테고리의 다른 글
스택(stack);값 형식과 힙(heap);참조 형식 (0) | 2023.06.27 |
---|---|
컴파일러(compiler)와 인터프리터(interpreter) (0) | 2023.06.27 |
서버 측 스크립트 언어에 관하여 (0) | 2023.06.21 |
포트 포워딩(port fowarding) (0) | 2023.06.20 |
TCP와 UDP와 IP 프로토콜 (0) | 2023.06.20 |