Hello

Kotlin Basic - typealias, !!, :?, ?.

by 볼빵빵오춘기

typealias

  • 복잡하거나 반복되는 타입 이름에 별칭(별명)을 붙여서 간단하게 사용하도록 해준다.
  • 가독성 향상, 코드 의미 명확화, 긴 타입 축약 등에 유용하다.
  • 실제 타입은 동일하지만, 의미적으로 구분지을 수 있다.
// 예제1
typealias Username = String // String을 Username 별칭으로 대체

fun main() {
    // 특정 자료형이나 긴 클래스의 이름에 typealias를 이용하여 별칭을 붙여주면 코드를 줄일 수 있다.
    var user: Username = "지니"
    println("별칭으로 대체된 Username 타입을 이용하여 값을 출력해보기 -> ${user}")
}
// String이라는 기본 자료형에 Username이라는 새로운 이름(별칭)을 붙인 것이다.
// String 대신 Username을 사용할 수 있게된다.
// 실제로는 Username도 String이기 때문에 동작상 차이는 없지만, 코드의 의미가 더 명확해진다.
// 예제2
typealias UserMap = Map<String, List<Int>>

fun printUserData(data: UserMap) {
    println(data)
}
// 긴 타입 이름을 UserMap으로 줄여 사용하면 가독성이 향상된다.

 

!!

  • 널 강제 언래핑 연산자이다. (단정기호라고도 부른다.)
  • nullable 타입에서 null이 아니라고 개발자가 직접 보장할 때 사용한다.
  • 만약 null이면 런타임 시 NullPointerException(NPE) 발생한다.
var str2 : String? = "Hi Hi" // 타입이 String? 이므로 값에 null이 있을 수도 있는 상황
println("str2의 길이 : ${str2!!.length}") // str2의 길이 : 5 // str2가 확실히 null값이 아니므로 !! 사용함

 

?.

  • 세이프콜 연산자라 부른다.
  • null로 인한 예외를 방지하기 위해 사용되는 연산자이다.
    (자바에서는 null인 객체에 접근하면 NullPointerException(NPE)가 발생하는데, 코틀린에서는 이런 위험을 줄이기 위해 ?. 세이프 콜 연산자를 사용한다.)
  • 삼항 연산자처럼 생각하면 된다.
    (why? if~else구문으로 충분히 표현이 가능하기 때문 코틀린에서는 삼항 연산자를 지원하지 않는다.
    // 세이프콜과 엘비스연산자(?:)를 사용하여 검사하는 코드
    var str4 : String? = "아메리카노"
    println("str4 ${str4} length : ${str4?.length ?: -1}") // str4 아메리카노 length : 5
    str4 = null
    println("str4 ${str4} length : ${str4?.length ?: -1}") // str4 null length : -1

 

정리하자면

문법  설명  주의점
typealias 타입에 별칭을 붙여 가독성을 높이고 코드 간결화에 도움을 줌 동일한 이름이 존재하면 이름 충돌 주의
!! null이 아님을 개발자가 보장하며 강제로 접근 null일 경우 NullPointerException 발생
?. 객체가 null이 아닐 때만 안전하게 프로퍼티/함수를 호출함 반환값이 null일 수 있으므로 후처리 필요
?: null일 경우 기본값을 반환하는 엘비스 연산자(Elvis Operator) 기본값을 반드시 제공해야 함

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기