일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- heroku
- scanner
- array
- 사칙연산
- Kadane's Algorithm
- 자바입력
- hash table
- R
- 자바 스레드 실행 순서 제어
- input
- 자바 thread 실행 순서 제어
- Easy
- JAVA11
- 카데인 알고리즘
- 수학
- SpringBoot 2
- Today
- Total
목록Design Pattern/Behavioral Pattern (10)
DeFacto-Standard IT
1. 가정 - 비디오를 보여주는 프로그램을 만든다. - Mpeg, Avi 포맷을 지원한다. 2. Naive Code - VideoStrategypublic interface VideoStrategy { public void doVideo(); } - MpegVideoStrategypublic class MpegVideoStrategy implements VideoStrategy { @Override public void doVideo() { System.out.println(this.getClass().getSimpleName() + "# doVideo()"); } } - AviVideoStrategypublic class AviVideoStrategy implements VideoStrategy { @..
1. 가정 - 채팅을 구현한다. - 채팅은 최대 4명이 가능하다. 2. Naive Code - Userpublic class User { private String name; private String message; List userList; public User(String name) { this.name = name; userList = new ArrayList(); } public void setMessage(String message) { this.message = message; } public void addUser(User user) { userList.add(user); } public void chat() { for(User user : userList) user.receiveMessa..
1. 가정 - 여러 종류의 작업을 처리하는 프로그램을 작성한다. - 처리가능한 작업의 종류는 A~D까지 있다. (종류일 뿐, A~D등급은 아니다.) - 작업의 처리는 해당 작업의 종류를 출력하는 것으로 구현한다. - 위 4가지 종류의 작업이 아니라 다른 종류의 작업이 있으면, 해당 작업에 대해 처리를 할 수 없다는 표시를 한다. 2. Naive Code - Jobpublic class Job { private char type; public Job(char type) { this.type = type; } public char getType(){ return this.type; } } 작업을 의미하는 Job 클래스이다. - JobExecutorpublic class JobExecutor { private..
1. 가정 - 책을 등록하고, 등록한 책의 내용을 모두 출력하는 프로그램을 작성한다. - 책은 4개 존재한다. 2. Naive Code - Bookpublic class Book { private String name; public Book(String name){ this.name = name; } public String getName() { return this.name; } } 책에 대한 클래스이다. - NaiveBookShelf1public class NaiveBookShelf1 { private Book[] books; private int last = 0; public NaiveBookShelf1(int maxsize){ this.books = new Book[maxsize]; } publi..
1. 가정 - 로직1, 로직2, 고유메서드, 로직3 의 순서로 출력하는 클래스를 2개 만든다. - 고유메서드를 호출하면, 현재 클래스의 이름을 출력한다. - 로직1, 2, 3은 모든 클래스가 동일한 로직을 수행한다. 2. Naive Code - NaiveConcreteClass1, 2 public class NaiveConcreteClass1 { public void call(){ logic1(); logic2(); uniqueMethod(); logic3(); } private void logic1(){ System.out.println("logic1()"); } private void logic2(){ System.out.println("logic2()"); } private void logic3()..
1. 가정 - 숫자를 저장하는 DB를 만든다. (클래스로 한정) - DB에 있는 숫자 중 최소, 최대 값을 출력하는 차트를 만든다. - 차트는 DB에 값이 추가될 때 마다 추가된 값 까지 고려하여 최소, 최대값을 재출력한다. 2. Naive Code - NumberDataBasepublic class NumberDataBase { private List numberList; // DB에 값이 입력될 때 마다 Chart를 갱신시키기 위해 레퍼런스 존재 private MinMaxChart minMaxChart; public NumberDataBase(MinMaxChart minMaxChart){ numberList = new ArrayList(); this.minMaxChart = minMaxChart; }..
1. 가정 - TV리모컨을 만든다. - 버튼을 클릭 시 전원이 켜진다2. Naive Code - NaivePowerSupplypublic class NaivePowerModule { public void turnOn(){ System.out.println("TV ON"); } }실제로 TV를 켜고 끄는 TV의 모듈이다. - NaiveButtonpublic class NaiveButton { private NaivePowerModule naivePowerModule; public NaiveButton(NaivePowerModule naivePowerModule) { this.naivePowerModule = naivePowerModule; } public void press() { naivePowerMod..
공통점 인터페이스를 사용함으로써 Concrete Class를 캡슐화 한다. 따라서 Context Class에서, 어떤 클래스가 할당 됐는지에 관계 없이 인터페이스 만을(Strategy, State) 인자로 받아서 그대로 가상 메서드를 수행하는 코드가 적혀있다. 즉, 두 패턴 모두 Context Class는 영향을 받지 않고 유연한 변경에 대처가 가능하다는 것이다. 차이점 표면상으로는 다를게 없는데 왜 굳이 분리를 해놨을까. 차이점은 다음과 같다. State는, State에 따른 로직의 끝에, setState(new State())를 호출함으로써 State를 스스로 변환할 수 있는데 반해, Strategy의 경우 외부에서 데이터의 입력이 필요하다. 즉, Strategy 패턴의 경우 어떤 Concrete C..
1. 가정 - 형광등을 구현한다. - 버튼은 on, off 2개 뿐이다. - 꺼진 상태에서 off를 누르면 반응이 없고, on을 누르면 켜진다. - 켜진 상태에서 on을 계속 누르면 색상이 변화한다. - on을 누를 때 마다 흰색 - 초록 - 노랑 - 빨강의 색상으로 바뀐다. - 빨간색에서 on을 누르면 과부화되어 자동으로 꺼진다. 2. Naive Code - NaiveLightpublic class NaiveLight { // 현재 전원 상태 // 0 - OFF / 1 - ON / 2 - 초록 / 3 - 노랑 / 4 - 빨강 private int state = 0; public void off(){ switch (state) { case 0: System.out.println("반응 없음"); brea..
1. 가정 - 로봇을 2개 만든다. - 로봇은 이동, 공격이라는 동작을 할 수 있다. - 로봇1은 이동으로는 도보, 공격으로는 펀치를 사용할 수 있다. - 로봇2는 이동으로는 비행, 공격으로는 미사일을 사용할 수 있다. 2. Naive Code 가장 먼저 생각할 수 있는 코드를 살펴보자. - 로봇 클래스 정의 - name, move(), attack() 정의 - Main method 정의 소스코드는 다음과 같다. - NaiveContextpublic abstract class NaiveContext { private String name; public abstract void attack(); public abstract void move(); public String getName() { return ..