본문 바로가기

디자인 패턴12

자바(JAVA) - 커맨드(Command) 패턴 1. 의도 요청 / 명령을 객체로 캡슐화하고 이를 매개변수화하여 다양한 요청 / 명령을 처리하거나 연기할 수 있도록 하는 행위 패턴 2. 용도 요청 / 명령을 객체화하여 매개변수화 하려는 경우 사용되는 행위 패턴 즉, 요청 / 명령들을 메서드 인수로 전달하고, 이들을 다른 객체의 내부에 저장 및 런타임에 연결된 요청 / 명령들을 전환하는 등 여러 작업을 할 수 있다. 3. UML 4. 구현 public interface ICommand { void execute(); } ============================================================== public class Light { public void turnOn() { System.out.println("Light.. 2023. 11. 1.
자바(JAVA) - 데코레이터(Decorator) 패턴 1. 의도 Decorator의 의미인 '장식자, 장식하는 사람'처럼 객체에 동적으로 장식(책임/기능)을 추가 할 수 있게 해주는 구조적인 패턴. 2. 용도 객체에 필요한 추가 장식(책임/기능)의 조합을 동적(런타임)으로 할 수 있는 구조다. 즉, 런타임에 동적으로 특정 객체에 장식(책임/기능)들을 조합하여 더 멋지게 만들 수 있도록 해준다. 예를 들어, 커피라는 객체를 만들 때 구체화된 컴포넌트는 커피가 되며 물, 우유, 크림, 시럽 등 다양한 장식의 조합이 가능한 경우를 사용할 수 있다. 3. UML 4. 구현 public class Client { public static void main(String[] args) { //안에서 밖으로 감싸진다. IDrink test = new Coffee(); I.. 2023. 10. 19.
자바(JAVA) - 빌더(Builder) 패턴 1. 의도 복잡한 객체를 생성하는 클래스와 표현하는 클래스를 분리하여, 동일한 절차에서도 서로 다른 표현을 생성하는 방법을 제공한다. 2. 용도 매개변수가 많은 객체를 안전하게 생성해야 할 때 사용하면 좋다. 3. UML 4. 구현 getter, setter, toString은 생략하자. TourPlan public class TourPlan { private String title; private LocalDate startDate; private LocalDate endDate; private String startPlace; private String endPlace; private List cyclists; public TourPlan() { } } Cyclist public class Cycli.. 2023. 10. 18.
자바(JAVA) - 전략(Strategy) 패턴 1. 의도 실행(런타임) 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 패턴 2. 용도 어떤 일을 수행하는 알고리즘이 여러가지 일때, 동작들을 미리 전략으로 정의함으로써 손쉽게 전략을 교체할 수 있는, 알고리즘 변형이 빈번하게 필요한 경우 적합 3. UML 4. 구현 템플릿 메서드와 비교하기 위해 동일한 예제로 진행한다. public class CoffeeMaker { private Coffee coffee; public void setCoffee(Coffee coffee) { this.coffee = coffee; } public void makeCoffee() { boilWater(); putEspresso(); putIce(); coffee.makeCoffee();.. 2023. 10. 17.
자바(JAVA) - 템플릿 메서드(Template Method) 패턴 1. 의도 부모 클래스에서 알고리즘의 골격을 정의하지만, 해당 알고리즘의 구조를 변경하지 않고 자식 클래스들이 알고리즘의 특정 단계들을 오버라이드(재정의)할 수 있도록 한다. 2. 용도 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메서드의 코드 중복을 최소화 할 때 유용하다. 동일한 기능을 상위 클래스에서 정의하면서 확장/변화가 필요한 부분만 서브 클래스에서 구현한다. 3. UML 4. 구현 예시) 커피 만들기 아이스 아메리카노 아이스 라떼 1. 물을 끓인다. 2. 끓는 물에 에스프레소를 넣는다. 3. 얼음을 넣는다. 4. 시럽을 넣는다. 1. 물을 끓인다. 2. 끓는 물에 에스프레소를 넣는다. 3. 얼음을 넣는다. 4. 우유를 넣는다. 1 ~ 3번의 알고리즘이 동일하다. 패턴 적용 전 pu.. 2023. 10. 13.
자바(JAVA) - 싱글톤(Singleton) 패턴 1. 의도 클래스의 개체 생성을 하나의 인스턴스로만 제한합니다. 2. 용도 단 하나의 유일한 객체를 만들기 위해서 사용합니다. 즉, 해당 인스턴스가 필요할 때 새로운 인스턴스를 만들지 않고 기존의 인스턴스를 가져와 활용하는 방법입니다. 예를 들어 파일에 환경설정(동적으로 변경되지 않음)정보가 있을 때, Singleton 패턴을 적용하지 않으면 필요 시 매번 객체를 생성하고 로드하는 비용이 발생합니다. 반면에 Singleton 패턴을 적용하면 최초 한번만 해당 객체를 로드하고 이후에는 로드한 객체를 사용할 수 있습니다. 3. UML 4. 구현 - synchronized 이용 public class Settings { // 1 - 인스턴스 뽑을 때마다 동기화 하기 때문에 성능이슈 생길 수 있음 private.. 2023. 10. 12.