IMCAT.DEV
로그인 가입
Kotlin 입문 문법

Kotlin 코틀린의 스코프 함수 (let, apply)

Kotlin 코틀린의 스코프 함수 (let, apply) — 초급

코틀린의 스코프 함수 (let, apply)

1. 도입 (왜 배워야 하는가)

코틀린의 스코프 함수는 코드의 가독성을 높이고, 객체의 속성에 쉽게 접근할 수 있도록 도와주는 유용한 기능입니다. 특히, 실무에서는 객체를 초기화하거나 설정하는 작업을 자주 하게 되는데, 이때 스코프 함수를 사용하면 코드가 더 간결하고 명확해집니다.

만약 스코프 함수를 사용하지 않는다면, 객체의 속성을 설정하기 위해 매번 객체 이름을 반복해서 입력해야 하므로 코드가 장황해지고, 실수로 잘못된 속성을 설정할 위험도 있습니다.

예를 들어, 객체를 생성한 후 여러 속성을 설정할 때 스코프 함수를 활용하면 코드가 일관되고 쉽게 유지보수할 수 있습니다.

2. 핵심 개념 설명

let

let 함수는 객체의 컨텍스트 내에서 코드를 실행할 수 있게 해주는 스코프 함수로, 주로 널 체크와 함께 사용됩니다.

비유: let은 마치 친구의 집에 가서 그 집에서만 할 수 있는 일을 하는 것과 같습니다. 집을 나서면 그 집의 물건이나 환경에 접근할 수 없으니까요.

apply

apply 함수는 객체의 속성을 초기화하거나 설정하는 데 유용한 스코프 함수입니다. 함수 내에서 객체를 this로 참조하여 속성에 접근할 수 있습니다.

비유: apply는 마치 요리사가 재료를 준비하고 조리하는 과정을 거치는 것과 비슷합니다. 요리사가 주방에서만 재료를 다룰 수 있는 것처럼, apply 안에서 객체의 속성을 조작할 수 있습니다.

함수설명사용 예시
let객체의 컨텍스트 내에서 코드 실행null 체크 및 안전한 접근
apply객체의 속성 초기화 및 설정객체 생성 시 속성 설정

3. 기본 코드 예제

let 사용 예제

val name: String? = "Kotlin"
name?.let {
    println("안녕하세요, $it!")
}
// 실행 결과: 안녕하세요, Kotlin!
  • name 변수는 문자열 또는 null이 될 수 있습니다.
  • let을 사용하여 name이 null이 아닐 경우에만 코드를 실행합니다.
  • it은 let 블록 내에서 name의 값을 가리킵니다.
  • apply 사용 예제

    data class Person(var name: String, var age: Int)
    
    val person = Person("John", 25).apply {
        age += 1 // 나이를 1 증가
    }
    println(person)
    // 실행 결과: Person(name=John, age=26)
  • apply를 사용하여 person 객체의 속성을 설정 및 변경합니다.
  • this 키워드 없이 객체의 속성에 직접 접근할 수 있습니다.
  • 4. 실전 활용 예제

    쇼핑몰에서 장바구니를 구현할 때

    data class CartItem(var name: String, var price: Double)
    
    val cartItem = CartItem("사과", 1000).apply {
        price *= 0.9 // 할인 적용
    }
    println(cartItem)
    // 실행 결과: CartItem(name=사과, price=900.0)
  • 장바구니에 추가할 아이템을 생성하고, apply를 사용해 할인 가격을 설정합니다.
  • 사용자 정보를 처리할 때

    data class User(var username: String, var email: String?)
    
    val user = User("alice", null).let {
        it.email = "[email protected]" // 이메일 설정
        it // 객체 반환
    }
    println(user)
    // 실행 결과: User(username=alice, [email protected])
  • 사용자의 이메일 정보를 안전하게 설정하고 반환하는 과정에서 let을 사용합니다.
  • 5. 흔한 실수와 주의사항

    실수 1: null 체크를 잊음

    val name: String? = null
    name.let { // NullPointerException 발생
        println("안녕하세요, $it!")
    }
  • let을 사용할 때는 항상 nullable 타입에 대해 null 체크를 해야 합니다.
  • 실수 2: apply와 let 혼동

    val person = Person("Alice", 30).let {
        it.age += 1 // 잘못된 접근
    }
    // 여기서 it이 Person 객체이므로 apply를 사용해야 함
  • let에서는 this를 사용할 수 없으므로, 객체 속성 조작에는 apply를 사용해야 합니다.
  • 6. 정리

  • 스코프 함수 let과 apply는 코드의 가독성을 높이고 객체 관리에 유용합니다.
  • let은 null 체크와 안전한 접근에 적합하며, apply는 객체의 속성을 초기화하는 데 유용합니다.
  • 잘못된 사용으로 인해 NullPointerException이나 혼동이 발생할 수 있으므로 주의해야 합니다.

다음에 학습하면 좋은 주제는 코틀린의 다른 스코프 함수 (also, with)입니다. 이를 통해 다양한 패턴을 익힐 수 있습니다.