PHpullh
학습 라이브러리/Kotlin/위임 패턴 (Delegation by)

KOTLIN · 객체지향

위임 패턴 (Delegation by)

by 키워드로 인터페이스 구현을 다른 객체에 위임합니다. 상속 없이 기능을 재사용하는 강력한 패턴입니다.

객체지향중급delegationbydecoratorcomposition

핵심 설명

by 키워드로 인터페이스 구현을 다른 객체에 위임합니다. 상속 없이 기능을 재사용하는 강력한 패턴입니다.

Kotlin code

interface Logger {
    fun log(message: String)
    fun error(message: String)
}

class ConsoleLogger : Logger {
    override fun log(message: String) = println("[LOG] $message")
    override fun error(message: String) = println("[ERR] $message")
}

// by로 Logger 구현을 위임
class UserService(logger: Logger) : Logger by logger {
    fun createUser(name: String) {
        log("사용자 생성: $name")
        // 비즈니스 로직...
        log("사용자 생성 완료: $name")
    }

    // 필요 시 특정 메서드만 오버라이드
    override fun error(message: String) {
        println("[USER-ERR] $message")  // 커스텀 에러 처리
    }
}

fun main() {
    val service = UserService(ConsoleLogger())
    service.createUser("김철수")
    service.error("중복 사용자")
}

학습 팁

위임은 데코레이터 패턴의 보일러플레이트를 크게 줄여줍니다. 필요한 메서드만 오버라이드하면 됩니다.

주의할 점

위임된 객체의 메서드에서 this는 위임자가 아닌 원래 객체를 가리킵니다. 오버라이드한 메서드가 위임 객체 내부에서 호출되지 않습니다.

자주 묻는 질문

위임 패턴 (Delegation by)란 무엇인가요?

by 키워드로 인터페이스 구현을 다른 객체에 위임합니다. 상속 없이 기능을 재사용하는 강력한 패턴입니다.

위임 패턴 (Delegation by) 학습 시 주의할 점은 무엇인가요?

위임된 객체의 메서드에서 this 는 위임자가 아닌 원래 객체를 가리킵니다. 오버라이드한 메서드가 위임 객체 내부에서 호출되지 않습니다.