목록분류 전체보기 (199)
JUINTINATION
탬플릿 메서드 패턴이란? 전체적으로 동일하면서 부분적으로 상이한 문장을 가지는 메소드의 코드 중복을 최소화하기 위해 상이한 부분은 하위 클래스에서 구현할 수 있도록 해주는 디자인패턴이다. 다음과 같이 엘레베이터 제어 시스템에서의 모터 관련 설계가 있다고 하자. enum DoorStatus { CLOSED, OPENED } enum MotorStatus { MOVING, STOPPED } enum Direction { UP, DOWN } class Door { private DoorStatus doorStatus; public Door() { doorStatus = DoorStatus.CLOSED; } public DoorStatus getDoorStatus() { return doorStatus; } p..
데커레이터 패턴이란? 기본 기능에 추가할 수 있는 기능의 종류가 많은 경우 기본 기능에 추가될 수 있는 많은 수의 부가 기능에 대해서 다양한 조합을 동적으로 구현할 수 있는 패턴이다. 다음과 같이 도로를 여러 가지 표시하는 프로그램이 있다고 하자. public class Client { public static void main(String[] args) { RoadDisplay roadDisplay = new RoadDisplay(); roadDisplay.draw(); RoadDisplayWithLane roadDisplayWithLane = new RoadDisplayWithLane(); roadDisplayWithLane.draw(); } } class RoadDisplay { public voi..
옵서버 패턴이란? 통보 대상 객체의 관리를 Subject 클래스와 Observer 인터페이스로 일반화하여 데이터의 변경이 발생하였을 때 상대 클래스 및 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 데이터 변경을 통보하는 클래스(ConcreteSubject)의 통보 대상 클래스/객체(ConcreteObserver)에 대한 의존성을 제거하여 통보 대상 클래스나 대상 객체의 변경에도 ConcreteSubject 클래스를 수정 없이 사용하는 패턴이다. 다음과 같이 여러 가지 방식으로 성적을 출력하는 프로그램이 있다고 하자. import java.util.ArrayList; import java.util.List; public class Client { public static void main(St..
커맨드 패턴이란? 실행될 기능을 캡슐화하여 기능의 실행을 요구하는 호출자 클래스(Invoker)와 실제 기능을 실행하는 수신자 클래스(Receiver) 사이의 의존성을 제거하여 이벤트가 발생했을 때 실행될 기능이 다양하면서 변경이 필요한 경우 실행될 기능의 변경에도 호출자 클래스의 수정없이 그대로 사용할 수 있도록 해주는 패턴이다. 다음과 같은 램프를 켜는 버튼이 있다고 하자. class Lamp { public void turnOn() { System.out.println("Lamp.turnOn"); } } class Button { private Lamp lamp; public Button(Lamp lamp) { this.lamp = lamp; } public void pressed() { lamp...
스테이트 패턴이란? 시스템의 각 상태를 클래스로 분리하고 각 클래스에서 수행하는 행위들을 메서드로 구현하여 어떤 행위를 수행할 때 상태에 행위를 수행하도록 위임하는 패턴이다. 스테이트 패턴과 스트래티지 패턴 공통점 행위를 클래스로 캡슐화 연관 관계를 이용해 행위를 구현한 클래스에 실제 작업을 위임 실행 중 행위 변경 가능 차이점 스트래티지 패턴 기능 수행 전략을 캡슐화 Client가 Context에 사용할 Strategy 지정 스테이트 패턴 객체의 상태를 캡슐화 Client가 Context의 State를 지정해주지 않음 위와 같은 상태 머신 다이어그램을 갖는 형광등이 있다고 하자. 해석해보면 다음과 같다. 형광등은 기본적으로 OFF 상태에서 시작한다. OFF 상태에서 사용자가 on 버튼을 누르면 ON 상..
스트래티지 패턴이란? 어떤 목적을 달성하기 위해 일을 수행하는 방식, 비즈니스 규칙, 문제를 해결하는 알고리즘 등을 의미하는 전략을 쉽게 바꿀 수 있도록 해주는 패턴이다. 프로그램에서 전략을 실행할 때는 쉽게 전략을 바꿔야 할 필요가 있는 경우가 많이 발생하는데 특히 게임 프로그래밍에서 게임 캐릭터가 자신이 처한 상황에 따라 공격이나 행동하는 방식을 바꾸고 싶을 때 스트래티지 패턴은 매우 유용하게 쓰인다. 다음과 같이 로봇을 만드는 클래스가 있다고 가정해보자. public class Main { public static void main(String[] args) { Robot taekwonV = new TaekwonV("TaekwonV"); Robot atom = new Atom("Ateom"); Sy..