본문 바로가기

Java27

Design Patterns - Command 요청을 캡슐화 하여 호출자(Invoker)와 수신자(receiver)를 분리하는 패턴 요청을 처리하는 방법이 바뀌더라도 호출자의 코드는 변경되지 않는다 public interface Command { void execute(); void undo(); } public class GameStartCommand implements Command { private Game game; public GameStartCommand(Game game) { this.game = game; } @Override public void execute() { game.start(); } @Override public void undo() { new GameEndCommand(this.game).execute(); } } pu.. 2022. 3. 1.
Design Patterns - Chain of Responsibility 요청을 보내는 쪽(Sender)과 요청을 처리하는 쪽(Receiver)을 분리하는 패턴 핸들러 체인을 사용해서 요청을 처리한다 public abstract class RequestHandler { private RequestHandler nextHandler; public RequestHandler(RequestHandler nextHandler) { this.nextHandler = nextHandler; } public void handle(Request request) { if (nextHandler != null) { nextHandler.handle(request); } } } 뼈대가 되는 추상클래스는 인스턴스변수로 다음 핸들러 역할을 할 대상을 갖고 있는다 public class AuthReq.. 2022. 1. 30.
Design Patterns - Proxy 특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴 초기화 지연, 접근 제어, 로깅, 캐싱 등 다양하게 응용해 사용 할 수 있다 public interface GameService { void startGame(); } public class DefaultGameService implements GameService { @Override public void startGame() { System.out.println("이 자리에 오신 여러분을 진심으로 환영합니다."); } } 기본적으로 수행해야 할 로직이 담겨있는 기본 구현체 클래스이다 public class GameServiceProxy implements GameService { private GameService gameService;.. 2022. 1. 16.
Design Patterns - Flyweight 객체를 가볍게 만들어 메모리 사용을 줄이는 패턴 자주 변하는 속성(또는 외적인 속성, extrinsit)과 변하지 않는 속성(또는 내적인 속성, intrinsit)을 분리하고 재사용하여 메모리 사용을 줄일 수 있다. public class Character { private char value; private String color; private Font font; public Character(char value, String color, Font font) { this.value = value; this.color = color; this.font = font; } } public final class Font { final String family; final int size; public Fon.. 2021. 12. 21.
Design Patterns - Facade 복잡한 서브 시스템 의존성을 최소화하는 방법 클라이언트가 사용해야 하는 복잡한 서브 시스템 의존성을 간단한 인터페이스로 추상화할 수 있다 public class EmailSettings { private String host; public String getHost() { return host; } public void setHost(String host) { this.host = host; } } public class EmailSender { private EmailSettings emailSettings; public EmailSender(EmailSettings emailSettings) { this.emailSettings = emailSettings; } /** * 이메일 보내는 메소드 * @.. 2021. 12. 10.
Design Patterns - Decorator 기존 코드를 변경하지 않고 부가 기능을 추가하는 패턴 상속이 아닌 위임을 사용해서 보다 유연하게(런타임에) 부가 기능을 추가하는 것도 가능하다 public class Client { private CommentService commentService; public Client(CommentService commentService) { this.commentService = commentService; } public void writeComment(String comment) { commentService.addComment(comment); } } 먼저 App에서 사용할 Client를 만들어 준다. public interface CommentService { void addComment(String c.. 2021. 12. 4.