콜백으로 상속 대신 위임을 사용하는 패턴이다. 상속 대신 익명 클래스 또는 람다식을 사용할 수 있다.
public interface Operator {
int getResult(int result, int number);
}
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);
}
}
}
public class Plus implements Operator {
@Override
public int getResult(int result, int number) {
return result += number;
}
}
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);
}
public stativ void main(String[] args) {
FileProcessor fileProcessor = new FileProcessor("number.txt");
int result = fileProcessor.process((sum, number) -> sum += number);
System.out.println(result);
}
사용내용에서 순서가 바뀐거 같네요!