행동 패턴: 템플릿 콜백 패턴

xellos·2022년 4월 12일
0

디자인 패턴

목록 보기
16/20

소개

콜백으로 상속 대신 위임을 사용하는 패턴이다. 상속 대신 익명 클래스 또는 람다식을 사용할 수 있다.


구현

1) 콜백 인터페이스

public interface Operator {
	int getResult(int result, int number);
}

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

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

3) 콜백 인터페이스를 구현하는 클래스 정의

public class Plus implements Operator {
	@Override
    public int getResult(int result, int number) {
    	return result += number;
    }
}

사용

1) 익명 클래스

public static void main(String[] args) {
	FileProcessor fileProcessor = new FileProcessor("number.txt");
    int result = fileProcessor.process(new Operator() {
    	@Override
        public int getResult(int result, int number) {
        	return result += number;
        }
    });
    System.out.println(result);
}

2) 람다식

public stativ void main(String[] args) {
	FileProcessor fileProcessor = new FileProcessor("number.txt");
    int result = fileProcessor.process((sum, number) -> sum += number);
    System.out.println(result);
}

2개의 댓글

comment-user-thumbnail
2023년 10월 18일

사용내용에서 순서가 바뀐거 같네요!

1개의 답글