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..
1. 의미 facade 사전적 의미 → (건물의) 정면; 앞면. 복잡한 서브 시스템(라이브러리, 프레임워크) 의존성을 최소화하는 방법 모든 기능들을 숨긴다 특정한 기능을 감싸고 있는 인터페이스 클라이언트가 사용해야 하는 복잡한 서브 시스템 의존성을 간단한 인터페이스로 추상화 복잡한 클래스나 메소드를 클라이언트가 직접 사용하지 않고 우리가 만든 facade 만을 이용하도록 함 2. 작성방법 아래 메일 전송 샘플 코드를 퍼사드 패턴으로 적용해본다. 2.1. 적용전 class Client { public static void main(String[] args) { String to = "keesun@whiteship.me"; String from = "whiteship@whiteship.me"; String ..
1. 의미 기존 코드를 변경하지 않고 부가 기능을 추가하는 패턴 상속이 아닌 위임을 사용해서 보다 유연하게(런타임) 부가 기능을 추가하는 것도 가능하다. 2. 작성 방법 2.1. 기존 코드에 부가기능 추가 시, 상속의 한계 CommentService : 댓글 서비스 TrimmingCommentService : CommentService상속, Trim 부가기능 추가 SpamFilteringCommentService : CommentService상속, SpamFilter 부가기능 추가 Trim기능과, SpamFilter 기능을 모두 사용하고 싶다면 새로운 서비스를 추가해야하는 상황이 발생 -> 유연하지 않는 코드 public class CommentService { public void addComment(..
1. 의미 그룹 전체와 개별 객체를 동일하게 처리할 수 있는 패턴 클라이언트 입장에서는 '전체'나 '부분'이나 모두 동일한 컴포넌트로 인식할 수 있는 계층 구조를 만든다.(Part-Whole Hierarchy) 2. 예제 가방 내부에 존재하는 아이템의 가격 계산 작성. 2.1. 패턴 적용 이전 public class Item { private String name; private int price; public Item(String name, int price) { this.name = name; this.price = price; } public String getName() { return name; } public int getPrice() { return price; } } public class..
1. 의미 추상적인 것과 구체적인 것을 분리하여 연결하는 패턴 하나의 계층 구조일 때보다 각기 나누었을 때 독립적인 계층 구조를 발전시킬 수 있다. 2. 예제 2.1. 하나의 계층 구조 public interface Champion { void move(); void skillQ(); void skillW(); void skillE(); void skillR(); } public class KDAAri implements Champion { @Override public void move() { System.out.println("KDA Ari move"); } @Override public void skillQ() { System.out.println("KDA Ari Q"); } @Override pu..