Java & 배경지식/패턴
-
프록시 패턴 - 백기선Java & 배경지식/패턴 2020. 6. 14. 17:42
프록시와 리얼 서브젝트가 공유하는 인터페이스가 있고, 클라이언트는 해당 인터페이스 타입으로 프록시를 사용한다. 클라이언트는 프록시를 거쳐서 리얼 서브젝트를 사용하기 때문에 프록시는 리얼 서브젝트에 대한 접근을 관리거나 부가기능을 제공하거나, 리턴값을 변경할 수도 있다. 리얼 서브젠트는 자신이 해야 할 일만 하면서(SRP) 프록시를 사용해서 부가적인 기능(접근 제한, 로깅, 트랜잭션, 등)을 제공할 때 이런 패턴을 주로 사용한다. 예제 public class Book { String title = "clean code"; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } ..
-
프록시 패턴Java & 배경지식/패턴 2020. 2. 17. 21:12
프록시 패턴이란? 프록시를 사용하는 방법중에서 타깃에 대한 접근 방법을 제어하려는 목적을 가진 경우 타깃의 기능을 확장하거나 추가하지 않고, 클라이언트가 타깃에 접근하는 방식을 변경해준다. public interface Image { public void displayImage(); } public class ProxyExample { public static void main(String[] args) { Image image1 = new ProxyImage("HiRes_10MB_Photo1"); Image image2 = new ProxyImage("HiRes_10MB_Photo2"); image1.displayImage(); // loading necessary image2.displayImage(..
-
데코레이터 패턴Java & 배경지식/패턴 2020. 2. 17. 20:40
public interface Car { public void assemble(); } public class BasicCar implements Car { @Override public void assemble() { System.out.print("Basic Car."); } } public class CarDecorator implements Car { protected Car car; public CarDecorator(Car c){ this.car=c; } @Override public void assemble() { this.car.assemble(); } } public class LuxuryCar extends CarDecorator { public LuxuryCar(Car c) { sup..
-
Strategy Pattern(전략패턴)Java & 배경지식/패턴 2020. 2. 13. 21:18
전략패턴이란? 자신의 기능 맥락(context)에서 필요에 따라 변경이 필요한 알고리즘을 인터페이스르 통해 통째로 외부로 분리시키고, 이를 구현한 구체적인 알고리즘 클래스를 필요에 따라 바꿔서 사용할 수 있게 하는 디자인 패턴. 쉽게말하면 다구현해 놓고 클라이언트가 필요에 의해서 필요한 것을 실행시키는 것 현 직장은 SI 그리고 R&D 중심의 회사다보니 중간에 요구사항 및 새로운 기능들이 추가되는 경우가 매우 많다. 그래서 핵심코드 관리를 잘하지 못하였으나 위의 전략패턴을 이용하게 된다면 핵심내용의 버전을 관리하거나 추가하기가 매우 편하다는 것을 느껴 아래와 같이 기본적인 뼈대를 만들었다. 위와같은 구조로 만들었다. 코드들 Controller @Controller public class HomeContr..
-
Session Facade 패턴Java & 배경지식/패턴 2020. 2. 10. 17:00
Session Facade 패턴 소트프웨어 라이브러리를 쉽게 사용 및 피해할수 있게 해준다. 공통적인 작업에 대해 간편한 메소드들을 제공 퍼사드 라이브러리를 사용하는 코드들을 좀 더 읽기 쉽게 해준다. 라이브러리 바깥쪽의 코드가 라이브러리의 안쪽 코드에 의존하는 일을 감소시켜 준다. 대부분의 바깥쪽의 코드가 퍼사드를 이용하기 때문에 시스템을 개발하는데 있어 유연성이 향상 좋게 작성하지 않은 API의 집합을 하나의 좋게 작성되 API로 감싸준다. 위의 역활들을 한마디로 말하면 서브시스템 내부에 있는 클래스에 접근할 수 있는 하나의 통합된 인터페이스를 제공 아래 Java 코드 예제는 사용자(you)가 퍼사드(컴퓨터)를 통해 컴퓨터 내부의 부품(CPU, HDD) 등을 접근한다는 내용의 추상적인 예제이다. /*..
-
Transfer Object 패턴(Value Object)Java & 배경지식/패턴 2020. 2. 10. 15:21
Transfer Object 패턴(Value Object) 데이터를 전송하기 위한 패턴 실제 사용하는 VO 및 DTO를 칭하는 패턴 Serializable를 구현한이유는 구현함으로써 객체를 직렬화할 수 있기 때문이다 직렬화 : 서버 사이의 데이터 전송이 가능 원격지 서버에 데이터를 전송하거나 파일로 객체를 저장할 경우에는 이 인터페이스를 구현해야함 public class StudentVO Implements Serializable{ private String name; private int rollNo; public StudentVO(){ super(); } StudentVO(String name, int rollNo){ super(); this.name = name; this.rollNo = rollN..