728x90
반응형
프로그래밍의 예술 중 하나로 꼽히는 "디자인 패턴"에 대해 이야기해보려고 합니다. 특히 자바 언어에서 자주 활용되는 몇 가지 디자인 패턴에 대해서 알아보겠습니다.
1. 싱글톤 패턴 (Singleton Pattern)
디자인에서 "싱글톤"은 유일무이한 존재를 의미합니다. 싱글톤 패턴은 하나의 인스턴스만 생성되도록 보장하며, 이 인스턴스에 대한 전역적인 접근을 허용합니다. 이 패턴을 사용하면 자원 낭비를 방지하고 객체 간의 일관성을 유지할 수 있습니다.
public class Singleton {
private static Singleton instance;
private Singleton() {} // private 생성자로 외부에서의 인스턴스 생성 방지
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
2. 팩토리 메서드 패턴 (Factory Method Pattern)
팩토리 메서드 패턴은 객체의 생성을 서브 클래스에서 결정하도록 하는 패턴입니다. 이를 통해 객체 생성의 책임을 서브 클래스로 분리시키고, 코드의 유연성을 높일 수 있습니다.
public interface Product {
void create();
}
public class ConcreteProduct implements Product {
@Override
public void create() {
System.out.println("Concrete Product created");
}
}
public interface Creator {
Product factoryMethod();
}
public class ConcreteCreator implements Creator {
@Override
public Product factoryMethod() {
return new ConcreteProduct();
}
}
3. 옵저버 패턴 (Observer Pattern)
옵저버 패턴은 객체 간의 일 대 다 의존성을 정의하는 패턴입니다. 한 객체의 상태가 변경될 때, 그 객체에 의존하는 다른 객체들에게 자동으로 알림을 전달합니다.
import java.util.ArrayList;
import java.util.List;
// Subject
public class Subject {
private List<Observer> observers = new ArrayList<>();
public void addObserver(Observer observer) {
observers.add(observer);
}
public void removeObserver(Observer observer) {
observers.remove(observer);
}
public void notifyObservers() {
for (Observer observer : observers) {
observer.update();
}
}
}
// Observer
public interface Observer {
void update();
}
// ConcreteObserver
public class ConcreteObserver implements Observer {
@Override
public void update() {
System.out.println("State updated");
}
}
이러한 디자인 패턴들은 코드를 보다 효율적이고 유지보수하기 쉽게 만들어주는 도구들입니다. 하지만 항상 적용해야 하는 것은 아닙니다. 상황과 요구사항에 따라 적절한 패턴을 선택하는 것이 중요합니다.
728x90
반응형
'Java > Java이론' 카테고리의 다른 글
리스트를 사용하는 다양한 알고리즘 구현 (0) | 2024.10.17 |
---|---|
Java ArrayList와 LinkedList의 차이점 및 성능 비교 (0) | 2024.10.15 |
Optional 클래스 (1) | 2023.11.29 |
자바 함수형 인터페이스와 기본 메서드 (0) | 2023.11.28 |
자바 네트워크 프로그래밍의 기초 (1) | 2023.11.28 |