안전 호출 연산자(?.)

안전 호출 연산자는 null이 들어갈 수도 있는 메소드에 대해서 말 그대로 안전히 호출하게 해준다

예를 들어 test?.test() 처럼 메소드를 실행시킨다고 하자

그러면 이것은 if(test ≠ null) { test.test() } else { null } 과 같다

정리하면 호출하려는 값이 null이 아니면 메소드를 실행하고 null이면 실행하지 않고 null을 반환한다

fun printAllCaps(s: String?) {
    // s가 널이 될 수 있는 타입의 경유
    // S?.upperCase() 식의 결과 타입은 String?
    val allCaps: String? = s?.uppercase()
}

엘비스 연산자(?:)

엘비스 연산자는 null을 편리하게 처리할 수 있게 해주는 연산자이다

return userRepository.findByEmail(accountId) 
				?: throw UserNotFoundException.EXCEPTION

예시로 위 같은 코드가 있다 만약 email을 조회했을 때 null이라면 우항의 연산인 예외를 처리해준다


안전한 캐스트(as?)

코틀린 타입 캐스트 연산자는 as

대상 값을 as로 지정한 타입으로 바꿀 수 없다면ClassCastException 발생