디자인패턴

    [디자인 패턴 - 번외] 플라이웨이트

    [ 플라이 웨이트 ] WHY? 똑같은 상태, 똑같은 행동을 하지만 많은 객체? 과연 똑같은 상태, 똑같은 행동을 하는 것을 우리는 객체로 관리를 한다. 여기서 만약 우리가 가지고 있는 메모리가 작다면? WHAT? 우리는 모든 것을 관리하는게 아니라 상태만 관리하자, 그리고 필요할 때만 가져와서 사용하자 HOW? 여러 나무를 관리하는 관리자 일때 public class TreeManager { private int[][] treeStatus; public TreeManager(int y, int x) { treeStatus = new int[y][x]; } public void init() { treeStatus[0][0] = 5; treeStatus[1][1] = 50; treeStatus[0][2] =..

    [디자인 패턴] - 컴포지트 패턴

    컴포지트 패턴이란? 부분-전체 계층 구조로 되어있는 트리구조를 통해 개별 객체와 복합 객체를 똑같은 방법으로 다룰 수 있다. Why? 어떤 문제가 있길래? 다 알고 싶어! 개별 객체 (영수증)과 나머지 상자 내부에서도 어떤 것이 있는지 알고 싶고, 동일한 동작을 원할 때 위 그림을 예시로 해보겠습니다. 배달받은 상자에는 여러 세부 상자와 영수증이 들어있고, 세부 상자들은 또 다른 상자들로 이루어져 있습니다. 이럴 때 부속품들이 많을 때 각각의 객체와 공통된 상자 박스들도 동일한 결과를 얻고 싶다 가정해 보겠습니다. 상황 박스를 받았다! 버즈박스와 충전기 박스, 핸드폰, 모니터가 존재했다. 버즈 박스 : 크래들과 이어버드가 존재 충전기 박스 : 충전기 존재 핸드폰과 모니터 존재 여기서 각 부품들은 동일한 ..

    [디자인 패턴] - 반복자 패턴

    반복자 패턴이란? 여러 객체가 모여있는 컬렉션의 구현 방법을 노출시키지 않고 동일한 반복을 하게 한다! Why? 어떤 문제가 있길래? 컬렉션이든 배열이든 값에 접근하는 방식이 다르다. 아래와 같이 저녁메뉴와 아침메뉴에 대한 클래스가 있고 각각 다른 형식으로 객체들의 집합을 정의했습니다. public class DinerMenu { static final int MAX_ITEMS = 6; int numberOfItems = 0; MenuItem[] menuItems; public DinerMenu() { menuItems = new MenuItem[MAX_ITEMS]; addItem("저녁 A 세트", "저녁 세트 구성", false, 9.99); addItem("저녁 B 세트", "저녁 채식주의 구성",..

    [디자인 패턴] 템플릿 메소드 패턴

    템플릿 메서드란? 부모 클래스에서 알고리즘의 구조를 정의하지만, 해당 알고리즘의 구조를 변경하지 않고 자식 클래스들이 알고리즘의 특정 단계들을 오버라이드하여 행동하는 디자인 패턴 Why 어떤 문제가 있길래? 전체적인 동작은 같지만, 세부적인 동작이 다를때 예를들어, 레스토랑에서 주문을 한다고 생각해 보겠습니다. 한정된 수량만 받기 때문에 예약만 받는다고 가정하겠습니다. public class AppOrder { public void processOrder() { takeOrder(); // 주문 받기 provideOrderSummary(); // 주문 요약 provideReservationNo(); // 예약 번호 제공 } } public class CallOrder { public void proces..

    [디자인 패턴] - 전략 패턴

    전략 패턴이란 객체가 할 수 있는 행위(기능)들 각각을 전략으로 만들어 놓고 사용하며, 동적으로 전략 수정이 가능한 패턴 무슨 문제가 있길래? 왜 이런 패턴이 나왔을까 한번 천천히 보겠습니다. class Subway{ public void take() { System.out.println("카드를 찍고 들어갑니다."); } } class Bus{ public void take() { System.out.println("카드를 찍고 들어갑니다."); } } class Airplain{ public void take() { System.out.println("표를 내고 들어갑니다."); } } class Train { public void take() { System.out.println("표를 내고 들어갑..