본문 바로가기

Design Pattern11

싱글턴 패턴(Singleton Pattern) 싱글턴 패턴은 클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공하는 방법입니다. 싱글턴? 단순히 객체 인스턴스 1개 만드는 방법 아니야? 맞습니다. 하지만 하나만 있어도 충분히 잘 돌아가는 객체가 많습니다. 스레드 풀, 캐시, 대화상자, 사용자 설정, 등등 이런 객체들은 1개여야 정상적으로 작동할 수 있죠. 정적 변수를 쓰면 되는 것 아닌가요? 싱글턴 패턴은 특정 클래스에 객체 인스턴스가 하나만 만들어지도록 해 주는 패턴입니다. 전역 변수에 어떤 단점이 있나요? 전역 변수에 객체를 대입하면 애플리케이션이 시작할 때 객체가 생성됩니다. 리소스가 큰 객체이지만, 만약 사용하지 않게 되면 자원만 잡아먹는 객체를 생성하게 된 꼴 입니다. -> 그러면 싱글턴 패턴은 필요할때 생성하는건가? pub.. 2023. 9. 25.
팩토리 패턴(Factory Pattern) 코드에서 new를 사용하게 되면 인스턴스를 만드는 구상 클래스를 선택해야 됩니다. public Pizza orderPizza(String type){ if(type.equals("cheese")){ return new CheesePizza(); } if(type.equals("potato")){ return new PotatoPizza(); } } 객체 생성을 처리하는 클래스를 팩토리(Factory)라고 부릅니다. 팩토리는 디자인 패턴이라기 보다는 프로그래밍에서 자주 쓰이는 관용구에 가깝습니다. public class PizzaFactory { public Pizza createPizza(String type){ if(type.equals("cheese")){ return new CheesePizza().. 2023. 9. 14.
데코레이터 패턴(Decorator Pattern) 데코레이터 패턴은 객체에 추가 요소를 동적으로 더할 수 있습니다. 서브클래스를 만들 때보다 훨씬 유연하게 기능을 확장할 수 있습니다. 구현 Component //인터페이스 사용해도 무방 public abstract class Beverage { String description = "제목 없음"; public String getDescription() { return description; } public abstract double cost(); } ConcreteComponent ConcreteComponent에 행동을 동적으로 추가합니다. public class Espresso extends Beverage{ public Espresso() { description = "에스프레소"; } publi.. 2023. 9. 11.
옵저버 패턴(Observer Pattern) 옵저버 패턴은 객체 간에 데이터나 상태의 변화를 관찰하고 한 객체의 변화를 다른 객체에게 알려줄 때 사용되는 패턴입니다. 주제를 나타내는 Subject 인터페이스와 관찰자인 Observer 인터페이스를 구현해볼까요? public interface Subject { void registerObserver(); //옵저버 등록 void removeObserver(); //옵저버 제거 void notifyObservers(); //옵저버에게 알림 } public interface Observer { void update(); } 구현체도 구현해볼까요? public class ConcreteSubject implements Subject{ private List observers; private int data.. 2023. 9. 7.
전략 패턴(Strategy Pattern) 전략 패턴은 특정한 작업 또는 알고리즘을 독립적으로 정의하고 이를 캡슐화하여 교환 가능하게 만드는 패턴입니다. 오리 클래스를 설계한다고 해봅시다. 오리에게 날 수 있는 기능과 울음소리를 내는 기능을 구현하려면 어떻게 해야 할까요? 나는 행동, 우는 행동에 대한 인터페이스를 정의하고 오리 클래스가 인터페이스를 가지고 있으면 됩니다. public interface FlyBehavior { void fly(); } public interface QuackBehavior { void quack(); } public abstract class Duck { FlyBehavior flyBehavior; QuackBehavior quackBehavior; ... } 그리고 인터페이스에 대한 구현체 클래스를 정의해줍니다.. 2023. 9. 6.