apply run with let also 예제 > IT 기술백서

[code]

fun main() {

    

    // Apply: 객체를 생성함과 동시에 연속된 작업이 필요할 경우 사용

    //  – 생성된 객체가 자동 리턴된다.

    var a = Book(“코틀린”, 10000).apply {

        name = “[초특가]” + name

        discount()

    }

       

    println(a)

    

    

    // Run: 

    // 스코프로 사용하기 위한 기능

    // 클래스의 경우: 이미 생성된 객체에 연속된 작업이 필요할 경우 사용

    //   – 객체자신이 파라미터 자동으로 전달된다.

    // 객체없이 사용할 경우: 익명함수처럼 사용할 수 있다.

    // 마지막줄이 리턴값이다. Unit 가능

    var c = a.run {

    println(“이름: ” + name + “, 가격: ” + price)

        // a // 리턴값

    }

    

    println(c)

    

    // With: Run 과 동일하나 파라미터를 사용자가 직접 설정할 수 있다

    // 설명 생략

    

    // Let: Run 의 문제점을 해결

    // run에서는 호출하는 스코프에 객체의 변수와 동일한 것이 있다면

    // 호출하는 스코프에 것이 우선시 되기 때문에 혼동이 일어난다.

    // 이때 명시적으로 it을 사용하여 처리 할 수 있는 기능

    var price = 5000

    a.let {

        println(“이름: ” + it.name + “, 가격: ” + price) // 5000 이 나온다

        println(“이름: ” + it.name + “, 가격: ” + it.price) // 8000 이 나온다

    }

    

    // Also: Apply 의 문제점을 해결

    // let과 같은 용도. 설명 생략

    

}

class Book(var name: String, var price: Int) {

    fun discount() {

        price -= 2000

    }

}

[/code]

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤