Kotlin By?

Picbel·2022년 9월 27일
1

Kotlin

목록 보기
2/4
post-thumbnail

이번 포스팅은 코틀린의 by키워드입니다.
제가 자바에서 코틀린으로 언어를 변경하면서 가장 만족하면서 쓰고있는 기능중 하나입니다.
디자인 패턴중 위임패턴을 굉장히 쉽게 사용하게 하여주는 키워드입니다.

사용법

사용법은 간단합니다

interface Address {
    val zipCode: String
    val address1: String
    val address2: String

    fun fullAddress() = "$zipCode $address1 $address2"
}

data class AddressModel(
    override val zipCode: String,
    override val address1: String,
    override val address2: String
) : Address

data class Restaurant(
    val name: String,
    private val address: Address
) : Address by address

주소기능을 사용하는 식당이 있다고 가정하겠습니다.
address를 프로퍼티로 들고 있는 방법도있지만 주소객체를 식당객체에 위임하겠습니다.

internal class RestaurantTest{

    private val restaurant: Restaurant = Restaurant(
        name = "테스트토랑",
        address = AddressModel(
            zipCode = "01234",
            address1 = "지구",
            address2 = "어딘가"
        )
    )

    @Test
    fun test(){
        println(restaurant.fullAddress())
        println(restaurant.zipCode)
        println(restaurant.address1)
        println(restaurant.address2)
        println(restaurant.name)
    }
}

보시면 식당객체에서 주소객체의 프로퍼티에 직접 접근이 가능해집니다.

By의 컴파일 결과물

보시면 마법은 없습니다.
결국 구현된것을 보면, 메소드에 인자로 전달받은 객체와 동일한 이름의 메소드를 호출하도록 구현되어 있는 것을 확인할 수 있습니다.
이러한 단순한 보일러플레이트 코드들을 줄여주는것이 By의 역할이라 보시면 됩니다.

어디에 응용을 하면 좋을까?

저의 경우 실무에서 애용하는 방법은 jpaRepository같은 외부에서 구현객체를 조립하는 경우와 많이 씁니다
코드로 보면 다음과 같습니다

interface AuthorJpaDao : JpaRepository<AuthorEntity, Long>

class AuthorDao(
    private val authorJpaDao: AuthorJpaDao
) : AuthorJpaDao by authorJpaDao

이렇게되면 AuthorDao만 주입을 받아도 JpaRepository의 기능들과 AuthorDao에서 구현한 기능들을 한 객체로 사용 할 수 있게됩니다.

profile
Software Developer

0개의 댓글