본문 바로가기

Design Pattern14

DAO Pattern 1. 정의 1) 업무와 DBMS를 분리하기 위해 사용됨 2) 업무와 데이터 2계층을 분리하고, 서로 그 상태를 동일하게 유지(persistence) 2. 문제 1) DB를 사용하는 방법이 변경되면 클라이언트의 수정이 많아진다 예) SQL문이 다른 DB로 변경하게 되면 클라이언트의 SQL코드를 수정해야한다. 3. 해결방안 1) 클라이언트는 DAO Pattern을 이용해 DB Interface를 사용하고 실제 수행되는 코드를 분리시킨다(loose coupling) 4. 사용 예제 1) 주소록 관리 어플리케이션 : DB가 바뀌어도 클라이언트 코드는 그대로(List -> sqlite) 1-1) 주소록 without DAO 1-2) 주소록 with DAO * DAO : 모델에 대한 기본적인 CRUD 인터페이스를 .. 2020. 1. 3.
State Pattern 1. 정의 1) 객체의 내부 상태가 바뀔 때 객체의 동작을 변경할 수 있도록 함 2) 객체는 자신의 클래스를 바꾸는 것처럼 보임. 3) State : 시점에 따라 특정 상태에 있어야 함. 4) Transition : 외부 입력에 따라 가능한 상태로 전환 2. 문제 1) 상태(state)가 여러 개 있고, if 문으로 상태를 통제 3. 해결방안 1) 상태를 한 곳에서 관리 4. 사용 예제 1) Finite State Machine 2019. 12. 31.
Facade Pattern 1. 정의 1) 서브시스템에 있는 여러 개의 인터페이스를 통합하는 한 개의 인터페이스를 제공. 2) 퍼사드는 서브 시스템을 쉽게 사용할 수 있도록 해주는 고급 수준의 인터페이스를 정의한다. 2. 문제 1) 서브시스템이 너무 많고 사용하기가 복잡함 3. 해결방안 1) 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스 제공 2) 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있음 4. 사용 예제 1) 홈 씨어터 시스템 팝콘 기계를 켜고 튀기기 시작 전등을 어둡게 조절, 스크린을 내림 프로젝터를 켜고 프로젝터로 DVD 신호 입력 프로젝터를 와이드 스크린 모드로 전환 앰프를 켜고 DVD로 전환 앰프를 서라운드 음향 모드로 전환 앰프 볼륨을 중간(5)로 설정 DVD 플레.. 2019. 12. 31.
Adapter Pattern 1. 정의 1) 클래스의 인터페이스를 클라이언트가 원하는 형태의 또 다른 인터페이스로 변환. 2) 어댑터는 호환되지 않는 인터페이스 때문에 동작하지 않는 클래스들을 함께 동작할 수 있도록 만들어 줌. 2. 문제 1) 사용 객체의 API가 서로 다름 3. 해결방안 1) 함수를 변환하는 객체를 중간에 넣음 4. 사용 예제 1) 전기 플러그 2) 객체 어댑터 : 서로 호환되지 않는 두 개 인터페이스를 연결하는 작업 2019. 12. 31.
Command Pattern 과제 과제 : Command Pattern을 이용하여 버튼을 누르면 동물의 사진을 출력하는 프로그램을 개발하라, undo기능 추가 그리고 기존에 제공한 코드를 @Override public void actionPerformed(ActionEvent e) { for (int i = 0; i < buttonTitles.length; i++) { if (e.getSource() == buttons[i]) { label.setIcon(imageIcons[i]); } } } 다음과 같이 실행할 수 있도록 바꾸어라(Command button 객체가 실행되게끔 설계) @Override public void actionPerformed(ActionEvent e) { if (e.getSource() instanceof Com.. 2019. 12. 31.
Command Pattern 1. 정의 1) 요구사항(요청, 명령)을 객체로 캡슐화 시킴. 2) 명령이 객체로 캡슐화 되기 때문에 큐에 넣거나 로그로 남길 수 있고, 작업 취소(undo) 기능 구현 가능 2. 문제 1) 사용하려는 객체(명령)가 많고, API가 서로 다른 경우 예) 홈 리모컨의 경우 차고문, 전등, TV, Stereo, 에어컨 등 사용해야 하는 객체가 너무 많고, 서로 다른 명령들로 구성되어 있음 3. 해결방안 1) 실행과 요청을 분리한다.(decoupling) 예) 리모컨 --> 커맨드 클래스 2019. 12. 31.