🔍명시적인 위임(explicit delegation)

어떤 객체가 가진 기능(메서드 호출 등)을 다른 객체에 위임할 때, 그 위임 과정을 직접 코드로 작성해야 하는 방식을 말한다. 자바에서는 이런 위임을 자동으로 처리해주는 문법이 없기 때문에, 개발자가 모든 메서드를 일일이 작성해서 위임해줘야 합니다. 이것이 코드를 장황하게 만들고 생산성을 떨어뜨리는 원인 중 하나입니다.

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();  // 명시적으로 위임
    }
}

🔹 자바의 명시적 위임 예시

위에서 DelegatingPrinterPrinter 인터페이스를 구현하면서 RealPrinter에게 동작을 명시적으로 위임합니다. 인터페이스에 메서드가 많다면 그 많은 메서드를 전부 위임 메서드로 작성해야 합니다.

🔹 코틀린에서는 by 키워드로 위임을 자동화

interface Printer {
    fun print()
}

class RealPrinter : Printer {
    override fun print() {
        println("Printing...")
    }
}

class DelegatingPrinter(printer: Printer) : Printer by printer