본문 바로가기

java/디자인패턴7

전략 패턴 템플릿 메서드 패턴은 부모 클래스에 변하지 않는 템플릿을 두고, 변하는 부분을 자식 클래스에 두어서 상속을 사용해서 문제를 해결한다. 전략 패턴은 변하지 않는 부분을 Context 라는 곳에 두고, 변하는 부분을 Strategy 라는 인터페이스를 만들고 해당 인터페이스를 구현하도록 해서 문제를 해결한다. 상속이 아니라 위임으로 문제를 해결한다. Context가 변하지 않는 템플릿 역할을 하고, Strategy는 변하는 알고리즘 역할을 한다. 알고리즘 제품군을 정의하고 각각을 캡슐화하여 상호 교환 가능하게 만든다. 전략을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다. Context는 내부에 Strategy strategy 필드를 가지고 있다. 이 필드에 변하는 부분인 St.. 2022. 10. 3.
템플릿 메서드 패턴 템플릿 메서드 패턴 : 부모 클래스에 변하지 않는 코드를 두고, 변하는 부분은 자식 클래스에서 상속과 오버라이딩을 사용해서 처리하는 패턴, 상속과 오버라이딩을 통한 다형성으로 문제를 해결함. 아래 코드에서 execute() 부분은 변하지 않는 부분이고, call()부분은 자식에서 상속받아서 사용할 변하는 부분이다. public abstract class AbstractTemplate { public void execute(){ long startTime = System.currentTimeMillis(); //비즈니스 로직 실행 call(); // 상속 //비즈니스 로직 종료 long endTime = System.currentTimeMillis(); long resultTime = endTime - s.. 2022. 10. 2.
전략 패턴(Strategy pattern) 1. 특정 메서드를 구현하고 상속을 하면, 이후에 해당 클래스를 상속받아 사용하는 클래스들에게 당연하게도 기능이 상속된다. 그럴 경우 상속받은 클래스는 구현된 기능과 어울리지 않는 속성의 클래스 일 수 있는데, 해당 메서드를 접근 가능하게 되어 문제가 발생한다. -> 상속으로 코드 재사용 생각할 경우 문제 오리 클래스에 fly() 메서드 구현하고 상속했을때, 추후 장남감 오리 클래스 만들어서 오리 클래스 상속받으면, 장난감 오리도 fly() 메서드를 사용할 수 있는 문제가 발생한다. 안 그러고 상속받아서 사용하려면 일일이 fly()메서드를 빈 메서드로 오버라이드 해야 한다. 2. (1) 문제 해결하기 위하여 클래스를 상속받은 클래스마다 interface를 사용해서 내용 구현하는 방법을 사용한다면? -> .. 2022. 8. 19.