어떤 객체가 가진 기능(메서드 호출 등)을 다른 객체에 위임할 때, 그 위임 과정을 직접 코드로 작성해야 하는 방식을 말한다. 자바에서는 이런 위임을 자동으로 처리해주는 문법이 없기 때문에, 개발자가 모든 메서드를 일일이 작성해서 위임해줘야 합니다. 이것이 코드를 장황하게 만들고 생산성을 떨어뜨리는 원인 중 하나입니다.
interface Printer {
void print();
}
class RealPrinter implements Printer {
public void print() {
System.out.println("Printing...");
}
}
// DelegatingPrinter는 Printer를 구현하지만 내부적으로 RealPrinter에 위임함
class DelegatingPrinter implements Printer {
private final Printer printer;
public DelegatingPrinter(Printer printer) {
this.printer = printer;
}
@Override
public void print() {
printer.print(); // 명시적으로 위임
}
}
위에서 DelegatingPrinter
는 Printer
인터페이스를 구현하면서 RealPrinter
에게 동작을 명시적으로 위임합니다. 인터페이스에 메서드가 많다면 그 많은 메서드를 전부 위임 메서드로 작성해야 합니다.
by
키워드로 위임을 자동화interface Printer {
fun print()
}
class RealPrinter : Printer {
override fun print() {
println("Printing...")
}
}
class DelegatingPrinter(printer: Printer) : Printer by printer