목차
- 싱글톤 패턴
- 팩토리 패턴
- 전략 패턴
- 옵저버 패턴
- 프록시 패턴
- 이터레이터 패턴
- 노출 모듈 패턴
- MVC 패턴
- MVP 패턴
- MVVM 패턴
1. 싱글톤 패턴 (Singleton Pattern)
특징
싱글톤 패턴은 하나의 클래스에 하나의 인스턴스만 존재하도록 보장하는 패턴입니다. 주로 전역적으로 접근 가능한 자원이 필요한 경우에 유용합니다.
장점과 단점
• 장점: 메모리 절약과 인스턴스 생성 비용을 줄일 수 있습니다.
• 단점: 의도치 않게 멀티스레드 환경에서 문제를 일으킬 수 있습니다.
사용 사례
로깅, 설정 관리, 데이터베이스 연결 등에서 많이 사용합니다.
Java 예제 코드
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
2. 팩토리 패턴 (Factory Pattern)
특징
객체 생성을 캡슐화하여 인터페이스에 따라 객체를 생성해주는 패턴입니다.
장점과 단점
• 장점: 객체 생성 과정을 분리해 코드의 유연성이 높아집니다.
• 단점: 코드가 복잡해질 수 있고, 클래스가 많아질 수 있습니다.
사용 사례
객체 생성 로직이 자주 변경될 때, 특정 인터페이스를 통해 객체를 생성해야 할 때 유용합니다.
Java 예제 코드
public interface Shape {
void draw();
}
public class Circle implements Shape {
public void draw() {
System.out.println("Drawing Circle");
}
}
public class Square implements Shape {
public void draw() {
System.out.println("Drawing Square");
}
}
public class ShapeFactory {
public Shape getShape(String shapeType) {
if (shapeType.equalsIgnoreCase("CIRCLE")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("SQUARE")) {
return new Square();
}
return null;
}
}
3. 전략 패턴 (Strategy Pattern)
특징
전략 패턴은 알고리즘을 개별 클래스로 캡슐화하고, 런타임에 교체할 수 있도록 합니다.
장점과 단점
• 장점: 코드의 확장성이 높아지고, 런타임에 다른 전략으로 변경할 수 있습니다.
• 단점: 전략 클래스를 추가해야 해서 코드가 복잡해질 수 있습니다.
사용 사례
동일한 작업을 다양한 방식으로 처리할 때, 예를 들어 정렬, 계산 등의 알고리즘을 구현할 때 사용합니다.
Java 예제 코드
public interface Strategy {
int execute(int a, int b);
}
public class AddStrategy implements Strategy {
public int execute(int a, int b) {
return a + b;
}
}
public class SubtractStrategy implements Strategy {
public int execute(int a, int b) {
return a - b;
}
}
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public int executeStrategy(int a, int b) {
return strategy.execute(a, b);
}
}
4. 옵저버 패턴 (Observer Pattern)
특징
상태 변화에 따라 자동으로 업데이트해야 하는 객체 집합이 있을 때 사용하는 패턴입니다.
장점과 단점
• 장점: 이벤트 기반 시스템에서 유용하며 관계의 유연성을 높일 수 있습니다.
• 단점: 옵저버가 많아지면 성능에 영향을 미칠 수 있습니다.
사용 사례
GUI 이벤트 리스너, 실시간 데이터 업데이트가 필요한 곳에서 많이 쓰입니다.
Java 예시 코드
import java.util.ArrayList;
import java.util.List;
public class Subject {
private List<Observer> observers = new ArrayList<>();
public void addObserver(Observer observer) {
observers.add(observer);
}
public void notifyObservers() {
for (Observer observer : observers) {
observer.update();
}
}
}
public interface Observer {
void update();
}
public class ConcreteObserver implements Observer {
public void update() {
System.out.println("Observer updated");
}
}
5. 프록시 패턴 (Proxy Pattern)
특징
프록시 패턴은 실제 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴입니다.
장점과 단점
• 장점: 접근 제어나 로깅을 통해 실제 객체를 보호할 수 있습니다.
• 단점: 복잡성이 증가하고 성능에 영향을 미칠 수 있습니다.
사용 사례
보안이 중요한 객체에 대한 접근 제어, 리소스가 많이 드는 객체의 생성 지연 등에서 사용됩니다.
Java 예제 코드
public interface Service {
void request();
}
public class RealService implements Service {
public void request() {
System.out.println("Request processed");
}
}
public class ProxyService implements Service {
private RealService realService;
public void request() {
if (realService == null) {
realService = new RealService();
}
System.out.println("Logging: Request started");
realService.request();
System.out.println("Logging: Request ended");
}
}
6. 이터레이터 패턴 (Iterator Pattern)
특징
이터레이터 패턴은 컬렉션 요소를 순차적으로 접근하는 방법을 제공하는 패턴입니다.
장점과 단점
• 장점: 컬렉션 구조를 숨기면서 반복 작업을 할 수 있습니다.
• 단점: 모든 컬렉션에 대해 이터레이터를 작성하는 것은 부담이 될 수 있습니다.
사용 사례
배열, 리스트 등 순차적으로 접근이 필요한 컬렉션에서 많이 사용됩니다.
Java 예시 코드
import java.util.Iterator;
import java.util.List;
public class CustomIterator<T> implements Iterator<T> {
private List<T> list;
private int position = 0;
public CustomIterator(List<T> list) {
this.list = list;
}
public boolean hasNext() {
return position < list.size();
}
public T next() {
return list.get(position++);
}
}
7. 노출모듈 패턴 (Revealing Module Pattern)
특징
모듈 내 특정 함수나 변수를 노출하여 외부에서 접근 가능하도록 하는 패턴입니다. Java보다는 주로 JavaScript 같은 언어에서 사용됩니다.
장점과 단점
• 장점: 코드의 캡슐화와 구조화에 도움이 됩니다.
• 단점: 코드의 의도를 잘못 전달할 수 있습니다.
8. MVC 패턴 (Model-View-Controller Pattern)
특징
애플리케이션을 모델, 뷰, 컨트롤러로 분리하여 구조화하는 패턴입니다.
장점과 단점
• 장점: 애플리케이션 구조를 분리하여 유지보수가 용이합니다.
• 단점: 구조가 복잡해질 수 있습니다.
사용 사례
웹 애플리케이션에서 사용자 인터페이스와 비즈니스 로직을 분리할 때 자주 사용됩니다.
9. MVP 패턴 (Model-View-Presenter Pattern)
특징
MVC 패턴에서 발전된 형태로, 비즈니스 로직을 프레젠터(Presenter)에서 처리하여 모델과 뷰를 완전히 분리하는 패턴입니다.
장점과 단점
• 장점: UI 테스트가 용이하며, 뷰와 모델 간 결합도를 줄일 수 있습니다.
• 단점: Presenter의 역할이 커지면서 코드가 복잡해질 수 있습니다.
사용 사례
모바일 애플리케이션에서 특히 많이 사용되며, Android 개발에서 많이 활용됩니다.
10. MVVM 패턴 (Model-View-ViewModel Pattern)
특징
뷰와 모델 사이에 뷰모델(ViewModel)을 추가하여 데이터 바인딩을 통해 양방향 데이터 흐름을 구현하는 패턴입니다.
장점과 단점
• 장점: 코드의 유지보수가 용이하고, 데이터 바인딩으로 코드가 간결해집니다.
• 단점: 코드가 많아질 수 있으며, 데이터 바인딩 사용 시 성능 문제가 발생할 수 있습니다.
사용 사례
WPF, Xamarin, Android와 같은 플랫폼에서 주로 사용됩니다.
'CS' 카테고리의 다른 글
IP 주소 (0) | 2024.10.13 |
---|---|
메모리 구조 (Stack, Heap) (1) | 2024.09.29 |
메모리 (0) | 2024.09.29 |
운영체제 (System Call, Modebit, Trap, Interrupt, DMA Controller) (2) | 2024.09.29 |