면접 질문 목록으로 가기
면접 질문실전 질문꼬리 질문

코틀린의 스코프 함수 (Scope Functions)

skydovesJaewoong Eum (skydoves)||7분 소요

코틀린의 스코프 함수 (Scope Functions)

스코프 함수(scope function)란 Kotlin 표준 라이브러리에서 제공하는 함수 집합으로, 특정 객체의 컨텍스트(context) 내에서 코드 블록을 실행할 수 있게 해줍니다. 스코프 함수를 사용하면 보일러플레이트 코드를 줄이고, 가독성을 높이며, 객체 초기화 설정, null 검사, 연쇄 호출 등을 체계적으로 처리할 수 있습니다. 코틀린에서 제공하는 다섯 가지 스코프 함수는 let, run, with, apply, also이며, 각각의 특성과 용도가 다릅니다.

면접에서 스코프 함수 관련 질문은 코틀린의 관용적(idiomatic) 표현을 얼마나 잘 이해하고 있는지를 평가하는 중요한 주제입니다. 단순히 "이런 함수가 있다"는 수준의 답변보다는, 각 함수의 컨텍스트 참조 방식과 반환값의 차이, 그리고 실무에서 어떤 상황에 어떤 함수를 선택해야 하는지를 명확히 설명할 수 있어야 좋은 인상을 남길 수 있습니다. 이번 면접 질문을 통하여 아래 내용들을 학습하실 수 있습니다.

  • 각 스코프 함수의 컨텍스트 객체 참조 방식과 반환값을 설명하는 방법
  • 주어진 사용 사례(use case)에 적합한 스코프 함수를 선택하는 기준
  • thisit의 컨텍스트 참조 차이에 대한 이해
  • 스코프 함수를 중첩할 때 흔히 발생하는 실수와 그 해결 방법

컨텍스트 참조: thisit의 차이

스코프 함수는 람다 내부에서 컨텍스트 객체를 노출하는 방식에 따라 크게 두 가지로 나뉩니다.

  • this (수신 객체): run, with, apply에서 사용됩니다. 객체가 수신자(receiver)가 되므로, 별도의 한정자(qualifier) 없이 해당 객체의 메서드를 직접 호출할 수 있습니다.
  • it (람다 인자): letalso에서 사용됩니다. 객체가 람다 매개변수로 전달되므로, it을 통해 명시적으로 참조해야 합니다.

이 차이는 코드의 가독성에 직접적인 영향을 줍니다. 코드 블록이 주로 해당 객체의 메서드를 호출하는 경우에는 this를 사용하는 함수가 적합하며, 객체를 다른 함수에 전달하거나 명시적인 이름이 가독성에 도움이 되는 경우에는 it을 사용하는 함수를 선택하는 것이 좋습니다. 면접에서 이 두 가지 참조 방식의 차이를 코드 예제와 함께 설명할 수 있다면, 코틀린의 함수형 프로그래밍에 대한 깊은 이해를 보여줄 수 있습니다.

let

let은 객체를 it으로 전달하고, 람다의 실행 결과를 반환합니다. null 안전(null-safe) 연산과 값 변환에 가장 많이 사용됩니다.

val name: String? = "skydoves"
val greeting = name?.let { "Hello, $it!" }
println(greeting) // 출력: Hello, skydoves!

위 코드에서 name이 null이 아닌 경우에만 let 블록이 실행되며, 블록 내 마지막 표현식의 결과가 let의 반환값이 됩니다. 이처럼 ?.let 조합은 if (x != null) 분기를 대체하는 코틀린의 대표적인 관용 표현입니다.

let은 또한 표현식의 결과에 대해 제한된 스코프 내에서 이름 있는 참조를 도입할 때도 유용합니다. 불필요한 임시 변수를 선언하지 않고도 결과값을 활용할 수 있기 때문입니다.

이 면접 질문은 구독자 전용입니다

Dove Letter를 구독하시면 안드로이드, 코틀린 개발 관련 독점 면접 질문의 전체 내용을 볼 수 있습니다.

구독하기
면접 질문 목록으로 가기