본문 바로가기

강의

(63)
커맨드(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에서 ..
브릿지 (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..
어댑터 (Adapter) 패턴 https://velog.io/@sillutt/%EC%96%B4%EB%8C%91%ED%84%B0-Adapter-%ED%8C%A8%ED%84%B4 어댑터 (Adapter) 패턴 어댑터 패턴 velog.io 어댑터(Adapter) 패턴 클라이언트가 사용하는 인터페이스가 전혀 다르며 정해져 있고, 기존의 코드를 호환하여 재사용할 수 있도록 구현체로 변경해주는 패턴. 클라이언트는 타겟 인터페이스만으로 사용하고, 구현체를 담당하는 Adaptee와 타겟 사이의 Adapter를 활용한다. ex) Security package Security package는 다른 애플리케이션에서도 사용할 수 있지만, Account 및 Service는 특정 애플리케이션에서만 사용한다. 즉, Security package는 타겟에 해당하..
프로토타입 (Prototype) 패턴 https://velog.io/@sillutt/%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85-Prototype-%ED%8C%A8%ED%84%B4 프로토타입 (Prototype) 패턴 프로토타입 패턴 velog.io 프로토타입 패턴 기존 인스턴스를 복제하여 새로운 인스턴스를 만드는 방법 복제 기능을 가진 기존 인스턴스를 프로토타입으로 사용하여 새 인스턴스를 만들어 일부를 변경하여 사용한다. 기존의 인스턴스 생성에 시간이 오래 걸리는 경우 (DB를 읽어 생성, 네트워크의 API요청 데이터 기반 등) public class App { public static void main(String[] args) { GithubRepository repository = new Gith..

LIST