본문 바로가기

분류 전체보기

(198)
[Design Pattern] Command / Strategy / State Pattern Command Pattern 개요 요청을 객체의 형태로 캡슐화하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 매서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 하는 패턴 커맨드를 수행할 수 있도록 하는 패턴 구현 방법 public class main { public static void show(Box box) { for (int i = 0; i < 10; i++) { if (box.getX() == i) System.out.print("#"); else System.out.print("_"); } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); Box box = new Bo..
[Design Pattern] Flyweight pattern Flyweight Pattern 개요 동일/유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하여 사용하도록 하여 메모리 사용량을 최소화 하는 패턴 [참고] 메모리를 절약하는 방법 1. 생성 시 자주 사용하는 부분을 떼어내어 공용 객체로 생성 2. 한번 생성한 객체는 다시 사용하지 않도록 저장 후 활용하는 방법 -> Flyweight Pattern 구현 방법 import java.util.HashMap; public class Main { public static void main(String[] args) { Factory fac = new Factory(); Tree[] trees = new Tree[100]; for (int i = 0; i < trees.length; i++) { // [1] t..
[Design Pattern] Observer Pattern Observer Pattern 개요 옵저버 또는 리스너라 불리는 하나 이상의 객체를 관찰 대상이 되는 객체에 등록 -> 관찰 대상 객체가 발생시키는 이벤트를 받아 처리 이벤트가 발생하면 각 옵저버는 Callback을 받음 활용사례 > 이벤트 기반 프로그래밍 코드 구현 import java.util.ArrayList; public class main { public static void main(String[] args) { Subject center = new Subject(); Observer ob1 = new ObserverA(); // [1] Observer ob2 = new ObserverB(); center.registerObservers(ob1); // [2] center.registerObs..
[Design Pattern] Decorator Pattern Decorator Pattern 단계별 선택지 존재하는 경우 - Choice Step 1 = Big/Small - Choice Step 2 = Fast/Mid/Slow - Choice Step 3 = Robot/Tank 이를 구현하기 위한 방법 1. 모든 케이스에 대한 클래스를 다 만들어주기 ex) BigFastRobot(), BigFastTank() .... - 모든 것을 다 만들어야 함 -> 추가/삭제 등의 유지보수의 어려움 2. 단계별 Class 생성 ex) Step1 { //Big, Small // } Step2 { //Fast/Mid/Slow // } Step3 { //Robot/Tank // } 3. new Big(new Slow(new Robot())) 와 같이 사용할 수 있도록 하는 방법 ..
[Design Pattern] Adapter Pattern Adapter Pattern 개요 기존 사용하던 Library 교체가 필요한 경우 기존 코드 수정을 최소화 하기 위해 사용 > 새로운 Library API에 맞도록 Wrapper 생성 > 변환기로 사용 Facade와 비교 (용도가 다름) Facade Adapter 둘다 Wrapper 쉬운 Class 사용을 위한 단순 Wrapper 모듈 교체용 Wrapper 코드 구현 - 1 (변경 전) public class main { // [1] Test가 완료된 모듈 -> 크게 안 건드리고 싶음 public static void run(Azure az) { az.ms_connect(); az.ms_login("ID", "1221"); az.ms_sendData(); az.ms_receiveData(); az.ms_..
[Design Pattern] Facade Pattern Facade Pattern 개요 단순 Wrapper Class Class 사용법이 복잡하여 쉽게 사용하는 Wrapper를 만들때 사용 Design pattern중 가장 간단 구현 방법 //import java.util.ArrayList; //import java.util.List; public class main { public static void main(String[] args) { FacadeWrapper fw = FacadeWrapper.startInstance(); // [1] Singleton 적용 fw.Write("Test.txt", "Write this!!"); // [3] FacadeWrapper만 호출 fw.Read("Test.txt"); } } class FacadeWrapper {..
[Design Pattern] Singleton Pattern Singleton Pattern 개요 객체가 생성되는 최대 개수를 제한하는 방법 적용방법 > 생성자를 Private로 만들어서 Client에서 직접 생성하지 못하도록 함 > getInstance() 메서드를 통해서만 생성이 가능하도록 함 구현방법 public class main { public static void main(String[] args) { KFC kfc = KFC.getMe("Lee"); kfc.status(); KFC kf2 = KFC.getMe("Kim"); kf2.status(); } } class KFC { static KFC kfc; private static String KFCname; private KFC() { }; // [1] KFC k = new KFC() 로 불러서 쓰지..
[Design Pattern] Builder Pattern Builder Pattern 개요 2가지 종류의 Builder Pattern 존재 > Effective Java의 Builder Pattern = 생성자 인자가 많을 때 > GoF의 Builder Pattern = 생성 절차가 복잡할 때 구현 방법 - Java public class main { public static void main(String[] args) { // Cut gunCut = new Cut("군인컷", 2, 1, 1); // [1] // Cut gunCut = new Cut(); // [2] // gunCut.setStyle("군인컷"); // gunCut.setFront(2); // gunCut.setBack(1); // gunCut.setSide(1); // gunCut.statu..