본문 바로가기

전체 글

디자인 패턴 - 메멘토 패턴(Memento Pattern) 1. 정의 객체의 상태를 캡슐화한다. 2. 예시 임시적으로 게임 머니를 200 추가하고, 복구한다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ Game game = new Game(); System.out.println(game.tmpAddMoney(200)); System.out.println(game.restore().money); } } public class Game { GameMemento memento; public Game() { memento = new GameMemento(100, 100, 0); } public int tmpAddMoney(int money){ return m.. 더보기
디자인 패턴 - 중재자 패턴(Mediator Pattern) 1. 정의 서로 관련된 객체 사이의 복잡한 통신과 제어를 한 곳으로 집중한다. 2. 예시 중재자를 통해 아침에는 스트레칭하고, 저녁에는 걷는다는 것을 알린다. 3. 그림 5. 코드 public class Client { public static void main(String[] args){ Mediator mediator = new Mediator(); Alarm morning = new MorningAlarm(); morning.setMediator(mediator); Alarm night = new NightAlarm(); night.setMediator(mediator); mediator.addBehavior(new Walking()); mediator.addBehavior(new Stretchin.. 더보기
디자인 패턴 - 플라이웨이트 패턴(Flyweight Pattern) 1. 정의 인스턴스 하나로 여러 개의 가상 인스턴스를 제공할 때 사용한다. 💡 인스턴스가 하나이기 때문에 모두 똑같은 방식으로 처리할 수 있다. 2. 예시 조경 설계 애플리케이션에서 나무를 객체 형태로 추가한다. 단, 많이 추가해도 실행이 느려지지 않아야 한다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ TreeManager treeManager = new TreeManager(); treeManager.displayTree(); } } /* 출력 ------ x좌표 : 1 y좌표 : 2 ------ x좌표 : 2 y좌표 : 3 ------ x좌표 : 3 y좌표 : 4 ------ x좌표 : .. 더보기
디자인 패턴 - 책임 연쇄 패턴(Chain of Responsibility Pattern) 1. 정의 한 가지의 요청을 여러 단계에서 처리해야 할 때 사용한다. 2. 예시 메일을 스팸, 불편, 기본 메일로 구분한다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ Mail[] mail = new Mail[]{ new Mail("광고", "디자인 패턴 60초 광고를 요청합니다."), new Mail("불편", "이 패턴 너무 불편하네요."), new Mail("문의사항", "요청한 패턴이 동작하지 않습니다."), new Mail("건의사항", "다른 패턴이 있을까요?"), }; MailChain spam = new SpamMailChainImpl(); MailChain complaint =.. 더보기
디자인 패턴 - 빌더 패턴(Builder Pattern) 1. 정의 객체 생성 과정를 캡슐화한다. 2. 예시 휴가 계획 일정표를 만든다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ AbstractBuilder vacation = new VacationBuilder() .builder() .addHotel("j hotel") .addAirPlane("e air") .addTicket("j ticket") .addEvent("u event") .build(); System.out.println(vacation.hotel); System.out.println(vacation.airPlane); System.out.println(vacation.ticket.. 더보기
디자인 패턴 - 브릿지 패턴(Bridge Pattern) 1. 정의 기능을 처리하는 클래스와 구현을 담당하는 추상 클래스로 구분한다. 구현 및 추상 클래스 모두 독립적인 변경이 필요할 때 사용된다. 💡 기존 시스템을 변경하지 않고 기능을 확장할 수 있다. 2. 예시 어떤 리모컨을 쓸지, 어떤 티비를 쓸지 잘 모른다. 사용하는 리몬컨과 티비가 자주 바뀌기 때문에 쉽게 변경해서 사용할 수 있는 구조가 필요하다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ System.out.println("[로지택 리모컨]"); RemoteControl control = new LogitechRemoteControl(new SamsungTv()); control.next.. 더보기
디자인 패턴 - (원격)프록시 패턴 (Proxy Pattern) 1. 정의 특정 객체로의 접근을 제어하는 대리인(특정 객체를 대변하는 객체)을 제공한다. 2. 예시 클라이언트가 원격에 있는 부산과 제주도 기계의 로그를 요청한다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ String[] locations = new String[]{"부산 기계", "제주도 기계"}; System.out.println("[서울 본사에서 지방에 있는 기계 로그 요청]"); for (String lo : locations) { Subject subject = new Proxy(lo); System.out.println(subject.request()); } } } /* 출력 [서.. 더보기
디자인 패턴 - 상태 패턴(State Pattern) 1. 정의 내부 상태가 바뀜에 따라 객체의 행동이 바뀔 수 있게 한다. 마치 객체의 클래스가 바뀌는 것 같은 결과를 얻을 수 있다. 2. 예시 알맹이 뽑기 기계를 만든다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ GumballMachine machine = new GumballMachine(3); machine.insert(); machine.eject(); for(int i=0; i 0){ machine.setState(machine.no); }else{ System.out.println("알맹이가 매진되었습니다."); machine.setState(machine.soldOut); } } .. 더보기