본문 바로가기

디자인패턴13

[디자인패턴] 커멘드 패턴 (Command Pattern) 목적 요구사항(요청, 명령)을 객체로 캡슐화시킨다. 이를 통해 요구사항을 큐에 넣거나 로그를 남길 수 있으며 작업 취소 기능을 지원할 수도 있다. 사용하려₩는 객체가 많고, API가 서로 다른 경우에 사용한다. 요소 문제 : 사용 객체의 API가 서로 다름 해결 : 실행과 요청을 분리 결과 : 작은 클래스가 많아지지만, 객체 사용에 필요한 복잡성을 제거하고 감춤 (함수 이름이 동일해짐) 정의 커멘드 패턴 클래스를 가정집 리모컨 사용으로 비유 Client : 리모컨 버튼의 기능을 인지하고 버튼을 누름 Command : 버튼에 실제 사용 객체를 연결해 놓음 Invoker : 리모컨 버튼을 누르면 기능을 실행함 Receiver : TV, 전등 같은 실제 객체 Command Receiver를 알고 있고, Rec.. 2021. 12. 6.
[디자인패턴] 퍼사드 패턴 (Facade Pattern) 목적 서브 시스템을 쉽게 사용할 수 있도록 해주는 고급 수준의 인터페이스를 정의 요소 문제 : 서브시스템이 너무 많고 사용하기가 복잡함 해결 : 단순한 인터페이스를 제공하는 객체를 중간에 넣음 결과 : 최소 지식 원칙에 입각해 의존성 최소화 정의 다음과 같은 watchMovie 메소드를 갖는 Facade 클래스를 만들어서 사용한다. Facade 클래스는 여러 인터페이스를 가져다 씀. 영화를 보기위해 여러 인터페이스를 조작해야하지만, Facade 클래스로 watchMovie 메소드만 실행하여 단순화 할 수 있음. public void watchMovie(String movie) { System.out.println("Get ready to watch a movie..."); popper.on(); popp.. 2021. 12. 5.
[디자인패턴] 어댑터 패턴 (Adapter Pattern) 목적 클래스의 인터페이스를 클라이언트가 원하는 형태의 인터페이스로 변환 인터페이스 호환이 안되는 클래스를 사용할 수 있게 해줌 요소 문제 : 사용 객체의 API가 서로 다름 해결 : 함수를 변환하는 객체를 중간에 넣음 결과 : 변경 최소화 정의 어댑터를 통해 오리 대신 칠면조 사용하기 어댑터 클래스 (Turkey 인터페이스를 Duck 인터페이스로 사용할 수 있도록 만듬) public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; } public void quack() { turkey.gobble(); } public void fly() { turkey.. 2021. 12. 5.
[디자인패턴] DAO 패턴 목적 업무와 DBMS를 분리하기 위해 사용 요소 문제 : DB를 사용하는 방법이 변경되면 클라이언트의 수정이 많아짐 해결 : 사용 방법의 분리 결과 : loose coupling, 확장성 정의 Dao : 모델에 대한 기본적인 CRUD 인터페이스 Value Object (Model Object) : Dao를 사용하여 데이터를 저장하는 단순 POJO(실제 데이터를 담는 자바 클래스) -> Dao 가 DBMS서 받은 데이터를 넘겨줄 때는 VO에 담아서 넘겨줌. DaoImpl에서 findById 메소드를 구현한 코드. public Person findById(int id) { Person person = null; try { String fmt = "SELECT * FROM %s WHERE id = %d"; S.. 2021. 12. 4.