행동 패턴: 템플릿 메서드 패턴

xellos·2022년 4월 11일
0

디자인 패턴

목록 보기
15/20

소개

알고리즘 구조를 서브 클래스가 확장할 수 있도록 템플릿으로 제공하는 방법

  • 추상 클래스는 템플릿을 제공하고 하위 클래스는 구체적인 알고리즘을 제공한다.
  • 실질적으로 기존의 상속과는 반대로 구체 클래스로부터 기능을 추상클래스가 가져다 쓴다.
  • 관점에 따라서 IoC로 볼수 있다.

1) 장점

  1. 템플릿 코드를 재사용하고 중복 코드를 줄일 수 있다.
  2. 템플릿 코드를 변경하지 않고 상속을 받아서 구체적인 알고리즘만 변경할 수 있다.

2) 단점

  1. LSP 원칙을 위반할 수 도 있다.
  2. 알고리즘 구조가 복잡해질수록 템플릿을 유지하기 어려워진다.

구현

1) 추상 템플릿 클래스 구현

public abstract class FileProcessor {
	private String path;
    
    public FileProcessor(String path) {
    	this.path = path;
    }
    
    public final int process() {
    	try(BufferedReader reader = new BufferedReader(new FileReader(path))) {
        	int result = 0;
            Stirng line = null;
            
            while((line = reader.readLine()) != null) {
            	result = getResult(result, Integer.parseInt(line));
            }
            
           	return result;
        } catch (IOException e) {
        	throw new IllegalArgumentException(path + "에 해당하는 파일이 없습니다.");
        }
    }
    
    protected abstract int getResult(int result, int number);
}

2) 추상 템플릿을 구현하는 구체 클래스 제공

public class Multiply extends FileProcessor {
	
  public Multiply(String path) {
  	super(path);
  }
  
  @Override
  protected int getResult(int result, int number) {
  	return result *= number;
  }
  
}

사용

public class Client {
	public static void main(String[] args) {
    	FileProcessor fileProcessor = new Multiply("number.txt");
        int result = fileProcessor.process();
        
        System.out.println(result);
    }
}

0개의 댓글