Kotlin

스코프 함수

공부처음하는사람 2023. 12. 22. 20:57

람다함수의 특별한 케이스

val c: (String) -> Unit = { str -> 
        println("$str 람다함수") 
        println("2")
        println("3")
    }

    val calculate: (Int, Int) -> Int = { a, b ->
        println(a)  // 람다함수도
        println(b)  // 여러구문 사용이 가능하다
        a+b // 마지막 구문 a + b의 값을 Int형으로 반환한다.
    }
  • 람다함수도 여러 구문을 사용할 수 있다.

val a:() -> Unit = { println("파라미터가 없다,,") }
  • 파라미터가 없는 람다함수는 실행할 구문들만 나열하면 된다.

val c: (String) -> Unit = { println("$it 람다함수") } 
// 중괄호의 파라미터 이름을 생략하고 it을 쓰자.
  • 파라미터가 하나뿐이라면 it을 사용하자.

스코프함수

함수형 언어의 특징을 좀 더 편리하게 사용할 수 있도록 기본 제공하는 함수

스코프함수의 종류

apply

인스턴스를 생성한 후 변수에 담기 전에 초기화 과정을 수행할때 많이 사용한다.
참조연산자를 사용하지 않아서 코드가 깔끔해지는 장점이 있다.
apply는 생성되자마자 인스턴스에 다시 반환하므로 변수에 바로 넣어줄 수 있다.

run

apply처럼 스코프 안에서 참조연산자를 사용하지 않아도 된다는 점은 같지만,
일반 람다함수처럼 인스턴스 대신 마지막 구문의 결과값을 반환하는게 차이점이다.
따라서 인스턴스가 만들어진 후에 인스턴스의 함수나 속성을
scope 내에서 사용해야 할 때 유용하다.

with

run과 동일한 기능을 가지지만 단지 인스턴스를 참조 연산자 대신 파라미터로 받는다.
a.run { ... } / with(a) { ... }

also, let

apply / also
run / let
apply와 run이 참조연산자 없이 인스턴스의 변수와 함수를 사용할 수 있었다면,
also와 let은 파라미터로 인스턴스로 넘긴것 처럼 it을 통해서 인스턴스를 사용할 수 있다.

fun main() {

    var price = 5000

    var a = Book("디모의 코틀린", 10000).apply {
        name = "[초특가] ${name}"
        discount()
    }
    a.run {
        println("상품명: ${name}, 가격: ${price}원")
    }
    a.let {
        println("상품명: ${it.name}, 가격: ${it.price}원")
        // main의 price가 아닌 객체의 price를 사용한다.
        // apply도 마찬가지로 also를 사용해 객체의 값을 사용할 수 있다.
    } 
}

class Book(var name: String, var price: Int) {
    fun discount() {
        price -= 2000
    }
}
  • run 사용시 출력값 5000원
  • let 사용시 출력값 8000원

'Kotlin' 카테고리의 다른 글

고차함수와 람다식  (1) 2023.12.23
내일배움캠프 12.21 TIL  (0) 2023.12.22
내일배움캠프 12.20 TIL  (0) 2023.12.22
Set, Map  (0) 2023.12.22
리스트  (0) 2023.12.22