일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kadane's Algorithm
- Easy
- 자바입력
- 수학
- 자바 thread 실행 순서 제어
- heroku
- JAVA11
- 사칙연산
- R
- scanner
- 자바 스레드 실행 순서 제어
- input
- 카데인 알고리즘
- array
- SpringBoot 2
- hash table
- Today
- Total
목록Design Pattern (42)
DeFacto-Standard IT
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 ..
1. 가정 - 리눅스 파일 시스템을 만든다. - 리눅스 파일 시스템은 파일, 디렉토리를 구성할 수 있다. - 디렉토리는 파일과 디렉토리를 여러 개 저장할 수 있다. - 파일, 디렉토리 추가와 현재 파일 또는 디렉토리의 이름을 출력하는 기능을 구현한다. (편의상 삭제, 수정 등은 구현하지 않음) - 디렉토리의 경우, 해당 디렉토리에 하위 디렉토리가 있다면, 하위 디렉토리안에 있는 파일과 디렉토리들의 정보까지 출력한다. 단, 이 조건은 말단 디렉토리까지 유효하다. 2. Naive Code - Filepublic class File { private String name; public File(String name) { this.name = name; } public void info(String prefix..
1. 가정 - 화면에 글씨를 출력하는 프로그램 작성 - 기본출력 : '기본기능' 을 출력하며, 기본 기능이므로 무조건 모든 기능에서 처음 수행된다. - 옵션에 따라 '추가기능1', '추가기능2' 글씨를 출력할 수 있음 - 기본기능을 기본으로 하되 추가기능의 조합이 가능해야함 - 옵션 기능은 전부 수행할 수도 있고, 몇 개만 수행할 수도 있으며, 실행순서는 존재함 - 실행 순서가 존재한다는 것은, 기본기능 -> 추가기능 1 -> 2와 기본기능 -> 추가기능 2-> 1 모두 지원해야 한다는 의미이다. 2. Naive Code - DefaultPrintpublic class DefaultPrint { public void print() { System.out.println("기본 기능"); } }기본기능을 수..
공통점 & 차이점 공통점 1. Template Method Pattern을 사용. 공통점 2. Factory 클래스를 사용하여 객체를 생성. 공통점 3. Factory Method Pattern을 사용. 둘 다 추상적인 클래스와 Factory를 통해 실제 구현대상인 Concrete클래스와 Client간의 결합도를 낮춘다. 인자에 따라 생성되는 객체가 결정된다. 차이점 1. Factory 클래스에서 객체에 대한 생성을 지원하는 범위 Factory Method Pattern - 한 Factory 당 한 종류(create() 메서드가 Factory 클래스에 1개) Abstract Factory Pattern - 한 Factory 에서 서로 연관된 여러 종류 모두 지원(create() 메서드가 Factory 클..
1. 가정 - 휴대폰을 만든다. - 휴대폰은 자신을 구성하는 부품들에 대한 정보를 출력한다. - 제조사는 삼성, LG 2가지 제조사가 존재한다. - 각 제조사의 휴대폰은 자사의 부품들로만 구성된다. - 구성 부품은 CPU, 카메라 이다. 2. Naive Code - Phonepublic class Phone { private CPU cpu; private Camera camera; public void setCPU(CPU cpu) { this.cpu = cpu; } public void setCamera(Camera camera) { this.camera = camera; } public void info(){ cpu.info(); camera.info(); } } CPU, 카메라로 구성되는 Phone ..