[Kotlin] 스코프 함수에 대한 이해

node·2023년 12월 20일
0

이해 시리즈

목록 보기
5/11
post-thumbnail

들어가며


코틀린을 공부하다가 자바에는 없는 생소한 함수들이 존재해서 관련 함수들을 정리하고자 한다.

본론


스코프란?


: 패키지, 클래스, 함수 등의 코드 블록 내에서 변수의 유효 범위를 뜻하며
상위 스코프에서 선언된 변수를 하위 스코프에서 사용하거나 재정의 해서 사용할 수 있지만
하위 스코프에서 선언된 변수는 상위 스코프에서 조회할 수 없다.

스코프 함수란?

: 코틀린에서 객체의 범위를 지정하여 코드 블록을 실행하는 특별한 apply, also, let, run, with 5가지 함수로 객체의 생성, 초기화, 또는 조작 등 다양한 작업을 수행할 때 유용하게 사용한다.

  • apply

    • 수신 객체를 람다 함수의 리시버로 전달하고, 수신 객체 자체를 반환함
    • 수신 객체의 프로퍼티를 초기화하거나 설정할 때 사용
     val result = SomeObject().apply {
      	// 수신 객체의 프로퍼티 설정
      	property1 = "value1"
      	property2 = "value2"
      }
      
      // result = SomeObject
  • also

    • 수신 객체를 람다 함수의 파라미터로 전달하고, 수신 객체 자체를 반환함
    • 수신 객체에 데이터 할당 전 유효성 검사 시 사용
    val result = value?.also {
    	// 수신 객체를 활용한 작업
    	println("Value is: $it")
    }
    
    // result = value
  • let

    • 수신 객체를 람다 함수의 파라미터로 전달하고, 코드의 마지막 줄을 반환함
    • 수신 객체가 null인지 체크 후 작업을 수행할 때 사용
    val result = value?.let {
      // 수신 객체를 활용한 작업
      it + 10
    }
    // result = it + 10
  • run

    • 수신 객체를 람다 함수의 리시버로 전달하고, 코드의 마지막 줄을 반환함
    • 명시적 수신객체를 암시적으로 이용할 때 사용
    val result = value?.run {
      // 수신 객체를 활용한 작업
      this + 10
    }
    // result = this + 10

결론


  • apply, also, let, run 이라는 스코프 함수가 있으며 각자 사용방법이 다르다.

  • 수신객체 자체를 전달하는 함수는 this로 접근하고 수신객체를 파라미터로 전달하는 함수는 it으로 접근한다.


    리턴 값this로 접근it으로 접근
    수신 객체 자체applyalso
    Block의 마지막 줄runlet

    함수용도
    apply객체의 초기화
    also데이터 할당 전 유효성 검사
    letnull check 후 실행
    run명시적 수신객체를 암시적 수신객체로 이용할 때
profile
NOvice + DEveloper

0개의 댓글