인프런에서 제공하고 있는 강의를 보고 정리한 글입니다.
변수 선언 키워드 - var 과 val 의 차이점
바꿀 수 있는 키워드는 var 을 사용하고, 바꿀 수 없는 키워드는 val (read-only) 을 사용한다. 즉, var = variable , val = value 의 약자이다. 타입 명시를 원한다면 타입을 명시적으로 작성해줄 수 있다.
var number1: Long = 10L
변수를 만들고 초기값을 지정해주지 않는 경우는? 초기화되지 않은 변수를 사용하면, 컴파일 에러가 난다.
val 컬렉션에는 element는 추가할 수 있다.모든 변수는 우선 val 로 만들고, 꼭 필요한 경우에만 var 로 변경하면, 코드가 깔끔해질 수 있다.
Nullable
null 이 들어갈 변수가 있다면 타입? 을 사용한다.
var number3: Long? = 1_000L
number3 = null
객체 인스턴스화
객체를 인스턴스화 할 때 new 를 붙이지 않는다.
var person = Person("철수")
null 체크
코틀린은 문맥상 위에서 null을 체크해주면 아래에서 null 이 아니겠거니 하고, 메소드콜을 할 수 있도록 해준다.
코틀린에서는 null 이 가능한 타입을 완전히 다르게 취급한다.
Safe call 과 Elvis 연산자
val str: String? = "abc"
println(str.length) // error. null 이 들어갈 수 있으니까
println(str?.length) // null 이 아닌 경우에만 실행해달라는 뜻.
// null 이면 이거 전체가 그냥 null
elvis 연산자는 앞의 연산자가 null 이면 뒤의 값을 사용한다.
val str: String? = null
println(str?.length ?: 0) // 0
Example
fun startWithA1(str: String?) : Boolean {
return str?.startsWith("A")
?: throw IllegalArgumentException("Input Null")
}
fun startWithA2(str: String?) : Boolean? {
return str?.startsWith("A")
}
fun startWithA3(str: String?) : Boolean {
return str?.startsWith("A") ?: false
}
Elvis 연산은 ealry return 에도 사용할 수 있다.
null 아님 단언이 무엇인가?
nullable type이지만, 아무리 생각해도 null이 될 수 없는 경우
fun startWith(str: String?) : Boolean {
return str!!.startsWith("A")
}
null 이 아닌게 확실한 경우에만 !! 를 사용해야 한다.
플랫폼 타입
여러 java 패키지에 있는 java 코드를 가져다 쓸 때, @Nullable
, @Notnull
과 같은 어노테이션을 코틀린은 인식하고 이해한다. 근데 이런 어노테이션이 없다면, 코틀린이 알 수 없음. 이 경우를 플랫폼 타입이라고 부른다. 그래서 런타임 단에서 NPE 가 나게 된다. 그래서 사전에 java 코드를 읽고 미리 확인해두는 것이 좋다.
'[ Kotlin ]' 카테고리의 다른 글
코틀린에서 클래스를 다루는 방법 - 9강 (0) | 2024.08.23 |
---|---|
코틀린에서 함수를 제어하는 방법 - 8강 (0) | 2024.08.23 |
코틀린에서 코드를 제어하는 방법 - 6강, 7강 (0) | 2024.08.23 |
코틀린에서 코드를 제어하는 방법 - 5강 (0) | 2024.08.22 |
코틀린에서 변수와 타입, 연산자를 다루는 방법 #2 (0) | 2024.08.22 |