Computer Science/Design Pattern

Computer Science/Design Pattern

[디자인 패턴] 데코레이터 패턴 (feat. Spring)

전 글에도 언급했다시피 프록시를 사용하는 두가지 GOF 디자인 패턴에는 프록시 패턴과 데코레이터 패턴이 있다. 그 중 데코레이터 패턴은 새로운 기능 추가가 목적인 디자인 패턴이다. 예시 코드에서는 operation이라는 명칭의 메소드로 기능 추가 구현을 했다. 데코레이터 패턴 (기능 추가) 를 적용하기 전에 간결한 예시 코드를 먼저 보자. public interface Component { String operation(); } Component라는 인터페이스를 RealComponent라는 구현체로 구현한다. 그러기 위해서는 RealComponent에서 operation이라는 메소드 내부에 코드를 구현해야한다. 코드로 표현하면 다음과 같다. public class RealComponent implemen..

Computer Science/Design Pattern

[디자인 패턴] 프록시 패턴 (feat. Spring)

프록시는 기존 인터페이스나 클래스를 구현화 / 상속한 메소드나 클래스에 필터를 추가하거나 기능을 추가한다. @Override 와 같은 방법으로. 프록시는 기존 인터페이스와 클래스와 겉모양은 똑같지만 (call 할 수 있는 메소드명이 동일) 안에 로직은 다르다. 분명 프록시를 사용한 목적에 따라 무언가가 더 추가된다. 프록시의 주요 기능은 크게 두가지가 있다. 접근 제어 권한에 따른 접근 차단 캐싱 지연 로딩 부가 기능 추가 원래 서버가 제공하는 기능에 더해서 부가 기능을 수행한다. 예) 요청 값이나, 응답 값을 중간에 변형 예) 실행 시간을 측정해 추가 로그를 남김 접근 제어와 부가 기능 추가이다. 디자인 패턴 중 프록시를 사용하는 방법은 두가지가 있다. 프록시 패턴: 접근 제어가 목적 데코레이터 패턴:..

Computer Science/Design Pattern

[디자인 패턴] 전략 패턴 (feat. Spring)

템플릿 메서드 패턴의 단점을 보완한 전략 패턴이다. 템플릿 메서드 패턴과 추구하는 목표는 동일하다. 변하는 부분과 변하지 않는 부분의 로직을 분리한다. 템플릿 메서드 패턴은 이를 상속으로 구현했다면 전략 패턴은 이를 인터페이스로 구현한다. public interface Strategy { void call(); } 해당 인터페이스를 구현해 변하는 부분을 코드로 구현한다. public class StrategyLogic1 implements Strategy { @Override public void call() { log.info("비즈니스 로직 1 실행"); } } public class ContextV1 { private Strategy strategy; public ContextV1(Strategy ..

Computer Science/Design Pattern

[디자인 패턴] 템플릿 메서드 패턴 (feat. Spring)

템플릿 메서드란? 템플릿 메서드 패턴에 대한 나만의 한줄 요약을 이렇다. 변하는 부분과 변하지 않는 부분을 분리하기 위한 패턴. 변하는 부분을 자유롭게 구현할 수 있도록 추상 클래스 내에 추상 메서드를 만들어 줌으로 써 이를 구현한다. 변하지 않는 부분은 실제 동작할 클래스에 작성한다. 이를 간단히 Spring 내에 구현한 코드로 보면 다음과 같다. public abstract class TemplateMethodPattern() { public void runTemplate() { long startTime = System.currentTimeMillis(); // 변하지 않는 부분 // 비즈니스 로직 실행 (변하는 부분 분리) call(); // 상속받은 메서드 실행 // 비즈니스 로직 종료 long..

Computer Science/Design Pattern

이터레이터 패턴(Iterator Pattern)

이터레이터 패턴이란? - 데이터의 형식에 상관 없이 동일한 방법으로 데이터를 하나씩 조회해볼 수 있는 패턴 - 배열을 하나씩 꺼내보는 방법과 Map을 하나씩 꺼내보는 방식은 다름. - 집합체 클래스를 배열처럼 순차적으로 조회해볼 수 있다. @Getter @Setter public class Student { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } } - 학생 클래스 public interface Aggregate { Iterator createIterator(); } - Iterator 역할을 만들어내는 인터페이스를 결정 public class..

Computer Science/Design Pattern

팩토리 패턴

팩토리 패턴이란? - 객체를 생성하는 인터페이스는 미리 정의하되, 인스턴스를 만드는 클래스의 결정은 서브 클래스에서 내리는 패턴 - 객체를 생성하는 메소드를 추상클래스의 추상메소드로 미리 정의한다. // 객체를 생성할 추상 클래스 정의 public abstract class PizzaFactory { abstract Pizza createPizza(String name); } - 어떤 클래스가 만들어질 지는 CheesePizzaFactory가 정한다. public class CheesePizzaFactory extends PizzaFactory{ @Override Pizza createPizza(String name) { switch (name) { case "pickle": return new Chee..

레이튼
'Computer Science/Design Pattern' 카테고리의 글 목록