DesignPartterns

나머지 패턴

DesignPartterns - 나머지 패턴

4 minute read

디자인 패턴의 정의? 패턴이란 특정 컨텍스트 내에서 주어진 문제에 대한 해결책이다!. 컨텍스트(context)란? 패턴이 적용되는 상황을 뜻합니다. 반복적으로 일어날 수 있는 상황이어야만 합니다. 예 : 객체들의 컬렉션이 주어져 있습니다. (열쇠를 차에 두고 문을 잠그고 나와 버렸다.) 문제(problem)란? 그 컨텍스트 내에서 이루고자 하는 목적을 뜻합니다. 하지만 컨텍스트 내에서 생길 수 있는 제약조건도 문제에 포함됩니다. 예 : 컬렉션의 구현을 드러내지 않으면서 그 안에 있는 각 객체들에 대해서 순환작업을 할 수 있어야 합니다. (어떻게 회사에 제 시간에 도착할 것인가?) 해결책(solution)?

컴파운드 패턴

DesignPartterns - 컴파운드 패턴

4 minute read

컴파운드 패턴이란? 반복적으로 생길 수 있는 일반적인 문제를 해결하기 위한 용도로 두 개 이상의 패턴을 결합해서 사용하는 것. 패턴을 같이 쓴다고 무조건 컴파운드 패턴은 아니다. 문제를 해결하기 위한 용도로 사용해야 된다. 대표적인 컴파운드 패턴은 MVC이다. //Quckable인터페이스를 구현한 클래스들 public interface Quackable { public void quack(); } public class DuckCall implements Quackable{ @Override public void quack() { System.out.println("Kwak"); } } public class MallardDuck implements Quackable { @Override public void quack() { System.out.println("Quack"); } } public class RedheadDuck implements Quackable { @Override public void quack() { System.out.println("quack"); } } public class RubberDuck implements Quackable{ @Override public void quack() { System.out.println("Squeak"); } } 실행 public class DuckSimulator { public static void main(String [] args) { DuckSimulator simulator = new DuckSimulator(); simulator.simulator(); } void simulator() { Quackable mallardDuck = new MallardDuck(); Quackable redheadDuck = new RedheadDuck(); Quackable duckCall = new DuckCall(); Quackable rubberDuck = new RubberDuck(); System.out.println("\nDuck Simulator"); simulator(mallardDuck); simulator(redheadDuck); simulator(duckCall); simulator(rubberDuck); } void simulator(Quackable duck) { duck.quack(); } } ——————————— Duck Simulator Quack quack Kwak Squeak 거위가 추가되었다.

컴파운드 패턴-MVC

DesignPartterns - 컴파운드 패턴-MVC

1 minute read

MP3에대한 MVC 디자인 패턴의 관계에서 바라본 MVC 사용자는 뷰하고만 접촉할 수 있다. 컨트롤러에서 모델한테 상태를 변경하라는 요청을 한다. 컨트롤러에서 뷰를 변경해 달라고 요청할 수도 있다. 상태가 변경되면 모델에서 뷰한테 그 사실을 알린다. 뷰에서 모델한테 상태를 요청한다. 패턴 안경을 끼고 MVC를 살펴보자 스트래티지 패턴의 적용 원칙 자주 바뀌는 부분(기능)을 바뀌지 않는 부분과 분리하여 캡슐화 한다. 스트래티지 패턴(뷰와 컨트롤러) - 뷰 객체를 여러 전략을 써서 제공한다. 전략은 컨트롤러가 제공한다. 뷰에서는 애플리케이션의 겉모습에만 신경을 쓰고, 인터페이스의 행동에 대한 결정은 모두 컨트롤러한테 맡긴다.

프록시 패턴

DesignPartterns - 프록시 패턴

1 minute read

정의 어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴 클라이언트에서 메소드 호출시 호출을 중간에 가로채어 메소드 호출/ 접근제한등을 한다. 프록시 종류 원격(Remote Proxy) 프록시 가상(Virtual Proxy) 프록시 동적(Dynamic Proxy) 프록시 보호(Protection Proxy) 프록시 원격(Remote Proxy) 프록시 다른 jvm에 들어있는 객체의 대변인에 해당하는 로컬 객체. 프록시의 메소드를 호출하면, 그호출이 네트워크를 통해 전달되어 원격객체의 메소드가 호출, 결과는 프록시를 통해 클라이언트에게 전달됨. 가상(Virtual Proxy) 프록시 생성비용이 많이드는 객체를 대신하는 역할.

스테이트 패턴

DesignPartterns - 스테이트 패턴

2 minute read

스테이트(State) 패턴 스테이트 패턴을 이용하면 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있습니다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있습니다. 뽑기 기계의 상태 변화 객체의 상태에 따라서 실행되는 행위가 달라져야 할 때 → 객체 내부에서 if 절 또는 switch - case 절 의 전개 // 동전을 투입하는 행위 public void insertQuarter() { if (state == HAS_QUARTER) { System.out.println("동전은 한 개만 넣어주세요."); } else if (state == NO_QUARTER) { state = HAS_QUARTER; System.out.println("동전을 넣었습니다."); } else if (state == SOLD_OUT) { System.out.println("매진되었습니다.