0Pricing
Android Academy · 강의

안전한 호출과 Elvis

?. 및 ?: 연산자를 배워 보세요.

안전한 호출과 Elvis은(는) CoddyKit의 무료 Android Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Android Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Android Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

if 확인을 넘어서

모든 널 허용 값을 if로 확인해도 되지만, 금방 코드가 길어집니다. Kotlin은 널 처리를 위해 설계된 간결한 연산자를 제공합니다.

이 강의에서는 널 안전 호출 연산자 ?.와 엘비스 연산자 ?:를 다룹니다. 두 연산자는 자주 사용하게 될 도구입니다.

널 안전 호출 연산자

?. 연산자는 값이 널이 아닐 때만 메서드를 호출합니다. 값이 널이면 충돌하는 대신 전체 표현식이 null로 평가됩니다.

이는 널이 아닐 때만 실행하는 if 패턴을 안전하게 줄여 쓴 것입니다.

fun main() {
    val name: String? = "Coddy"
    println(name?.length)
}

널 값에 대한 안전 호출

수신 객체가 널이면 안전 호출은 즉시 중단되고 null을 반환합니다. 예외가 발생하지 않습니다.

여기서 출력되는 결과는 충돌이 아니라 null이라는 단어입니다.

fun main() {
    val name: String? = null
    println(name?.length)  // prints: null
}

안전 호출 연결하기

여러 단계에 걸쳐 ?.를 연결할 수 있습니다. 어느 한 연결 부분이 널이면 전체 연결이 중단되고 null이 됩니다.

중첩된 선택적 데이터를 탐색할 때 매우 유용합니다.

class Address(val city: String?)
class User(val address: Address?)

fun cityOf(u: User?): String? {
    return u?.address?.city
}

엘비스 연산자

엘비스 연산자 ?:는 왼쪽이 널일 때 대체값을 제공합니다. 기호와 비슷한 가수의 헤어스타일에서 이름이 유래했습니다.

왼쪽 값을 사용하고, 그렇지 않으면 오른쪽 값을 사용한다고 읽으면 됩니다.

fun main() {
    val name: String? = null
    val shown = name ?: "Guest"
    println(shown)  // prints: Guest
}

안전 호출과 엘비스 연산자 함께 사용하기

안전 호출과 엘비스 연산자는 함께 사용할 때 매우 잘 어울립니다. ?.로 값 내부에 접근하고, 값 중 하나라도 널이면 ?:로 기본값을 제공하세요.

이 패턴을 사용하면 널 허용 결과를 반드시 널이 아닌 값으로 바꿀 수 있습니다.

fun main() {
    val name: String? = null
    val len: Int = name?.length ?: 0
    println(len)  // prints: 0
}

기본 길이 예시

여기서 결과 형식은 Int?가 아닌 일반 Int입니다. 엘비스 연산자가 널 허용 특성을 제거했기 때문입니다.

널이 아닌 대체값과 함께 ?:를 사용하면 컴파일러는 해당 값이 절대 널이 될 수 없다는 것을 압니다.

val title: String? = "Kotlin"
val length: Int = title?.length ?: 0
// length is a non-null Int

조기 반환에 엘비스 연산자 사용하기

Kotlin에서 return과 throw는 표현식이므로 엘비스 연산자의 오른쪽에 배치할 수 있습니다.

필수 값이 없을 때 깔끔하게 조기에 빠져나오는 방법입니다.

fun process(input: String?) {
    val text = input ?: return
    println(text.uppercase())
}

let과 함께 안전 호출 사용하기

?.와 let을 조합하면 값이 널이 아닐 때만 블록을 실행할 수 있습니다. 블록 안에서는 값이 널이 아니며 it이라는 이름으로 사용할 수 있습니다.

선택적 값에 대해 작업할 때 흔히 사용하는 관용적인 방식입니다.

fun main() {
    val email: String? = "a@b.com"
    email?.let {
        println("Sending to " + it)
    }
}

한데 모아 사용하기

짧은 프로그램으로 안전 호출과 엘비스 연산자가 함께 작동하여 알기 쉬운 메시지를 만드는 과정을 확인할 수 있습니다.

if 문이 필요하지 않은데도 코드가 널로 인해 충돌할 위험이 없다는 점에 주목하세요.

fun main() {
    val nickname: String? = null
    val display = nickname?.uppercase() ?: "ANONYMOUS"
    println(display)
}

어떤 것을 사용할까요?

널 결과가 문제없이 전달되도록 하려면 ?.를 사용하세요. 널을 구체적인 기본값으로 바꾸려면 ?:를 사용하세요.

두 연산자를 함께 사용하면 장황한 확인 없이 일상적인 널 처리의 대부분을 해결할 수 있습니다.

val count = list?.size ?: 0
// safe call reads size, Elvis defaults to 0

빠른 확인

안전 호출과 엘비스 연산자에 대한 이해도를 확인해 보세요.

복습

안전 호출 ?.은 수신 객체가 널이 아닐 때만 멤버를 호출하고, 그렇지 않으면 null을 반환합니다. 엘비스 연산자 ?:는 널을 대체값으로 바꿉니다.

두 연산자를 연결하면 널 허용 특성을 깔끔하게 제거할 수 있습니다. 다음에는 let과 also 같은 범위 함수를 더 자세히 살펴보겠습니다.

자주 묻는 질문

“안전한 호출과 Elvis” 강의는 무료인가요?

네 — “안전한 호출과 Elvis” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Android Academy 강의 전체를 잠금 해제할 수 있습니다. Android Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“안전한 호출과 Elvis”에서 뭘 배우나요?

?. 및 ?: 연산자를 배워 보세요. 브라우저에서 직접 실행하는 실습 코드로 Android Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Android Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Android Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“안전한 호출과 Elvis” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Android Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Android Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 널 허용 형식과 널 불허 형식
  2. 안전한 호출과 Elvis
  3. let, also와 범위 함수
  4. NullPointerExceptions 방지하기
← Android Academy(으)로 돌아가기