본문 바로가기

전체 글

(161)
인터프리터(Interpreter) 패턴 Interpreter 통역 : 원본이 되는 것을 다른 형태로 변경함. 자주 사용하는 문제, 문법 등을 정의하고 이 문법에 맞춰 대입하여 문제를 해결한다. 정규 표현식 등이 해당된다. Code Example PostfixNotation public class PostfixNotation { private final String expression; public PostfixNotation (String expression) { this.expression = expression; } public static void main(String[] args) { PostfixNotation postfixNotation = new PostfixNotation("123+-"); postfixNotation.calcu..
커맨드(Command) 패턴 Command Pattern 요청 호출과 처리를 분리하는 패턴 중 하나이고, 중간에 Command 객체를 사용한다 요청을 처리하는 방법이 바뀌어도, 호출자의 코드는 변경되지 않는다. 요청을 캡슐화하여 전달한다. Code Example Button public class Button { private Light light; public Button(Light light) { this.light = light; } public void press() { light.on(); } public static void main(String[] args) { Button button = new Button(new Light()); button.press(); button.press(); button.press(); ..
책임 연쇄 패턴 책임 연쇄 패턴 여기서의 책임은 단일 책임 원칙 의 책임과 같다. 특정한 책임을 가진 클래스들이 연쇄적으로 처리하는 패턴이다. 그리고 요청과 처리를 분리하는 패턴이다. Code Example Client public class RequestHandler { public static void main(String[] args) { Request request = new Request("text"); RequestHandler requestHandler = new AuthRquestHandler(); requestHandler.handler(request); } } RequestHandler public class RequestHandler { public void handler(Request request..
프록시(Proxy) 패턴 Proxy 클라이언트가 특정 객체의 오퍼레이션에 접근하기 전 Proxy를 지나서 접근하는 패턴 맨 처음 요청을 모두 Proxy가 받게 된다. Proxy 객체를 생성해서 접근제어 및 만드는 데 리소스가 많이 필요한 객체에 대해서 효과를 볼 수 있다. 초기화 지연, 로깅이나 캐싱 또한 가능하다. Example Code public class GameService { public void startGame() { System.out.println("text"); } } Example Code - 2 1. 기존 코드 유지 GameServiceProxy public class GameServiceProxy extends GameService { @Override public void startGame() { lo..
플라이웨이트 (Flyweight) 패턴 https://velog.io/@sillutt/%ED%94%8C%EB%9D%BC%EC%9D%B4%EC%9B%A8%EC%9D%B4Flyway-%ED%8C%A8%ED%84%B4-ss6ti9tj 플라이웨이(Flyway) 패턴 플라이웨이 패턴 velog.io Flyweight 패턴 애플리케이션에서 많은 인스턴스를 생성하는 중에 사용할 수 있는 패턴이다. 인스턴스를 많이 사용하면 OutOfMemory, 즉 메모리가 부족한 현상이 발생하는데, 따로 모아서 재사용할 수 있는 패턴이다. 자주 사용하는 속성(extrinsit)과 그렇지 않은 속성(intrinsit)을 분리하여 자주 변경되지 않는 속성을 재사용한다. Code Flyweight의 속성은 immutable 해야 한다. 즉, 이 인스턴스의 값을 임의로 변경할 ..
퍼싸드(Facade) 패턴 Facade Pattern 일반적으로는 도로에서 바라보는 건물의 입구 모습을 의미한다. 건물 내부의 구성은 알 수 없다. 복잡한 의존성들을 최소화하는 방법으로, 의존성들을 간단한 인터페이스로 추상화하는 방법이다. Client가 코드들을 직접 사용하지 않고, 중간에 Facade의 중간 시스템을 두고 사용하는 기능에 대한 인터페이스를 압축시켜 Client는 Facade만 사용하도록 한다. Example Code public class Client { public static void main(String[] args) { String to = "innjie@naver.com"; String from = "innjielee@gmail.com"; String host = "127.0.0.1"; //java에서 ..
데코레이션 (Decoration) 패턴 https://velog.io/@sillutt/%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%EC%85%98-Decoration-%ED%8C%A8%ED%84%B4 데코레이션 (Decoration) 패턴 기존의 코드를 변경하지 않으면서 부가적인 기능(Dynamic) 을 추가할 수 있음runtime의 기존 코드를 확장하는 방법.상속이 아닌 위임을 사용해서 보다 유연하게 런타임에 부가 기능을 추가하는 것도 velog.io Decoration Pattern 기존의 코드를 변경하지 않으면서 부가적인 기능(Dynamic) 을 추가할 수 있음 runtime의 기존 코드를 확장하는 방법. 상속이 아닌 위임을 사용해서 보다 유연하게 런타임에 부가 기능을 추가하는 것도 가능하다. 컴포짓과 다르게 단 한..
브릿지 (Bridge) 패턴 https://velog.io/@sillutt/%EB%B8%8C%EB%A6%BF%EC%A7%80-Bridge-%ED%8C%A8%ED%84%B4 브릿지 (Bridge) 패턴 브릿지 패턴 velog.io 브릿지 (Bridge) 패턴 추상적인 것과 구체적인 것을 분리하여 연결하는 패턴 하나의 계층 구조일 때 보다 독립적인 계층 구조로 발전시킬 수 있다. 클라이언트는 implementation을 직접 사용하지 않고 추상적인 계층 구조만을 사용한다. 클라이언트는 exception을 사용하며 상위 로직을 담고 있다. 이를 구현하는 구현체, 즉 하위 클래스들은 추상적인 개념들을 확장해갈 수 있다. Code public class DefaultChampion implements Champion { private Ski..

LIST