디자인 패턴은 소프트웨어 개발에서 자주 나타나는 문제를 해결하기 위한 재사용 가능한 설계 방법입니다.
이는 객체지향 프로그래밍에서 코드의 구조를 효율적으로 만들고, 유지보수성과 확장성을 높이는 데 도움을 주는 표준화된 접근 방식입니다.
### 디자인 패턴의 분류
디자인 패턴은 일반적으로 3가지 유형으로 나눠집니다:
#### 1. 생성 패턴 (Creational Patterns)
객체 생성과 초기화를 다루며, 코드에서 객체 생성 방식을 효율적으로 관리하도록 합니다.
- 예:
- Singleton: 한 클래스에 대해 객체가 하나만 생성되도록 보장합니다.
- Factory Method: 객체 생성 과정을 캡슐화하여 유연성을 제공합니다.
- Builder: 복잡한 객체 생성 과정을 단계별로 나눕니다.
#### 2. 구조 패턴 (Structural Patterns)
클래스와 객체 간의 관계를 정의하며, 다양한 객체를 결합하여 더 큰 구조를 형성합니다.
- 예:
- Adapter: 다른 인터페이스를 가진 클래스를 호환 가능하게 만듭니다.
- Decorator: 객체에 새로운 기능을 동적으로 추가합니다.
- Composite: 객체를 트리 구조로 구성하여 부분-전체 관계를 표현합니다.
#### 3. 행위 패턴 (Behavioral Patterns)
객체 간의 상호작용과 책임 분담을 다루며, 프로세스 흐름을 개선합니다.
- 예:
- Observer: 객체의 상태 변화가 다른 객체에 자동으로 전달되도록 합니다.
- Strategy: 알고리즘을 유연하게 선택할 수 있게 합니다.
- Command: 명령을 객체로 캡슐화하여 실행/취소 기능을 구현합니다.
### 왜 디자인 패턴이 중요한가?
1. 코드 재사용성 증가: 문제가 반복적으로 발생할 때, 이를 효과적으로 해결할 수 있습니다.
2. 가독성 향상: 패턴을 사용하면 코드의 설계 의도를 명확히 전달할 수 있습니다.
3. 유지보수 용이: 코드 변경이 필요할 때, 기존 구조를 깨지 않고 추가 구현을 쉽게 할 수 있습니다.
4. 효율적인 개발: 이미 검증된 솔루션을 사용하여 시간과 비용을 절약합니다.
### 예제
#### Singleton 패턴
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
- 용도: 데이터베이스 연결, 설정 파일 관리 등 객체를 하나로 제한해야 할 때 사용.
---
#### Observer 패턴
import java.util.ArrayList;
import java.util.List;
class Subject {
private List<Observer> observers = new ArrayList<>();
public void addObserver(Observer observer) {
observers.add(observer);
}
public void notifyObservers(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}
}
interface Observer {
void update(String message);
}
class ConcreteObserver implements Observer {
private String name;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + " received message: " + message);
}
}
public class ObserverExample {
public static void main(String[] args) {
Subject subject = new Subject();
Observer observer1 = new ConcreteObserver("Observer 1");
Observer observer2 = new ConcreteObserver("Observer 2");
subject.addObserver(observer1);
subject.addObserver(observer2);
subject.notifyObservers("Hello, Observers!");
}
}
- 용도: UI 변경, 이벤트 핸들링 등 상태 변화가 필요한 경우.
'프로그래밍 > Java' 카테고리의 다른 글
람다 표준 함수적 인터페이스 (0) | 2025.04.10 |
---|---|
디자인패턴 - Strategy 패턴 (0) | 2025.04.10 |
Optional (0) | 2025.04.08 |
Enum (0) | 2025.04.08 |
이클립스 SVN LOCK 해제하기 (0) | 2023.01.18 |