1. 이터레이터 패턴? 집합 객체의 내부 구조를 노출시키지 않고 순회하는 방법을 제공하는 패턴. 2. 이터레이터 패턴 적용 2.1. 적용 전 코드 클라이언트가 Board클래스 내부의 Post에 대해 너무 많은 것을 알고있음. 내부 Post의 타입이 변경될시 클라이언트 코드도 같이 변경되어야 함. public class IteratorClient { public static void main(String[] args) { Board board = new Board(); board.addPost("디자인 패턴 게임"); board.addPost("선생님, 저랑 디자인 패턴..."); board.addPost("지금 이자리에 계신 여러분들은 모두..."); //TODO 들어간 순서대로 순회하기 List pos..
1. 의미 인터프리터(interpreter) 사전적 의미 → 통역, 연주자 자주 등장하는 문제를 간단한 언어로 정의하여 재사용하는 패턴 반복되는 문제 패턴을 언어 또는 문법으로 정의하고 확장 패턴이나 언어, 문법등으로 정의하여 이슈 발생시 대입하여 사용 정규식을 일종의 인터프리터로 본다. context 글로벌 변수, 모든 expression에서 사용되는 정보 expression interpret(context), context에 있는 값을 참조 1. terminal expression 자체 종료 2. non terminal expression 다른 expression을 참조해 봐야 결과를 확인, 다른 expression을 참조(재귀) terminal 을 참조할 수 있고 다른 non terminal exp..
1. 커맨드 패턴 요청을 캡슐화 하여 호출자(invoker)와 수신자(receiver)를 분리하는 패턴 요청을 처리하는 방법이 바뀌더라도, 호출자의 코드는 변경되지 않는다. Invoker : 호출자 Command 수신자가 어떤 클래스이고, 수신자가 어떤 명령을 호출해야하는지 명시 명령을 수행하기 위한 모든 작업들을 캡슐화, 재사용 용이 여러 구체적인 커맨드들을 구체화 Receiver : 수신자 ConcreteCommand : 구현체, 어떠한 수신자를 사용할지, 수신자의 명령 및 파라미터들을 명시 2. 커맨드 패턴 적용 전 호출자쪽에 비슷한 코드가 중복되는 문제 > 호출자와 수신자간의 관계가 타이트하여 발생 호출자쪽에서 다른 명령을 실행하고 싶다면, 코드를 또 변경해야하는 상황이 발생 public clas..
1. 책임연쇄패턴 요청을 보내는 쪽(sender)과 요청을 처리하는 쪽(receiver)를 분리하는 패턴 핸들러 체인을 사용해서 요청을 처리한다 2. 패턴 적용 전 목적에 따라 매번 클라이언트는 새로 작성된 클래스를 변경해주는 코드변경을 감수해야만 한다 또한, 여러 개의 목적을 복합적으로 처리해야될 경우 새로운 문제에 봉착할 수 있다. 책임연쇄 패턴을 적용할 경우, 위의 문제점들을 해결해나갈 수 있다. @Data public class Request { private String body; public Request(String body) { this.body = body; } } public class RequestHandler { public void handler(Request request) { ..
1. 프록시 패턴 특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴. 초기화지연, 접근 제어, 로깅, 캐싱등 다양하게 사용 가능함. 2. 패턴 적용 전 코드 아래와 같이 게임을 시작하는 메서드가 존재함. 게임을 시작하는 메서드를 수정하지 않고 프록시 패턴을 적용하여 메서드가 실행되는 소요시간을 계산하려함. public class GameService { public void gameStart() { System.out.println("이 자리에 오신 여러분 진심으로 환영합니다."); } } public class Client { public static void main(String[] args) { GameService gameService = new GameService(); gameS..
1. 플라이 웨이트(FlyWeight) 패턴 객체를 가볍게 만들어 메모리 사용을 줄이는 패턴. 자주 변하는 속성과 변하지 않는 속성을 분리하고 재사용하여 메모리 사용을 줄일 수 있다. 2. 패턴 적용 전 코드 Character를 생성시 중복되는 파라미터가 존재함. (fontFamily, fontSize) 중복은 상황과 생각에 따라 다르게 결정될 수 있음. public class Character { private String value; private String color; private String fontFamily; private Integer fontSize; public Character(String value, String color, String fontFamily, Integer font..