Kotlin 복습(3)-Scope Function

지슈·2023년 7월 9일
0

Kotlin 복습

목록 보기
3/4

Scope Function(범위 지정함수)

코틀린 표준 라이브러리에서 제공하는 확장함수

  • 목적 : 간결성, 명료성, 유지보수 용이성
  • 정의 : 객체의 컨테스트 내에서 실행 가능한 코드 블럭을 만드는 함수
    - 호출 시 임시 범위가 생성되며, 이 범위 안에서는 이름 없이 객체에 접근 가능
    • context : 문맥, 맥락, 전후 사정
  • 수신 객체(receiver) : 확장 함수가 호출되는 대상이 되는 값(객체)
  • 수신 객체 지정 람다(lambda with receiver) : 수신 객체를 명시하지 않고, 람다의 본문 안에서 해당 객체의 메서드를 호출할 수 있게 하는 것

함수 종류

  • let : null 체크를 해야할 때, 지역 변수를 명시적으로 표현해야할 때
  • run : 객체를 초기화하고, 리턴 값이 있을 때
  • apply : 객체 초기화
  • also : 수신객체를 명시적으로 사용하고 싶을 때, 로그를 남길 때
  • with : 객체 초기화, 람다 리턴 값이 필요 없을 때

let

//1. let
    val a = 3
    a.let { }
    val user = User("정지수", 10, true)
    
    val age = user?.let {
        user.age
    }
    println(age)

수신 객체를 통해서 확장함수를 사용할 수 있고 로컬 변수를 명시적으로 사용할 수 있다.

run

//2. run
    //수신 객체.run { this ->
    //
    // 마지막 줄
    //}
    val kid = User("아이", 4, false)
    val kidAge = kid.run{
        this.age
    }

let과의 차이는 로컬 변수를 사용하지 못하고 this를 사용해야한다는 것. this는 생략가능하다.
return 값은 람다 리턴식이다.

apply

//3. apply
    //수신 객체.apply {
    //ㅇㄹㅇㄴㄹㄴㅇㄹ
    // 마지막 줄
    //}
    val kidName = kid.apply{
        name
    }
    println(kidName)

apply의 특징은 return 값이 수신객체 자기 자신이라는 것이다.
this로 리턴 값을 받을 수 있다.
그래서 출력값이 com.example.kotlin.User@34ce8af7이다.
주로 수신객체를 초기화할 떄 사용한다.

also

//4. also
    //수신객체.alse{ it -> //local variable로 사용 가능
    //
    //
    //} 
    val male = User("민수",17, false, true)
    val maleValue = male.also {
        it.name
    }
    println(maleValue)

also도 return 값이 수신객체 자기 자신이다.
apply와 차이점은 로컬변수로 명시해서 사용가능하다는 점.
수신객체의 내용을 확인하고 싶을 때, 로그를 찍을 때 주로 사용하는 함수이다.

with

with는 확장함수는 아니다.

//5. with
    //with(수신객체){
    //---
    //마지막
    //}
    val result = with(male){
        hasGlasses = false
        true
    }

with의 ()안에 수신객체를 넣어서 접근한다. this로 접근한다(생략가능).

profile
😎인공지능&⛓️블체

0개의 댓글