Android

[Kotlin] 코틀린 - 변수

귀뚜래미 2024. 7. 31. 17:27
728x90

변수 선언

val : value, 초기값이 할당되면 바꿀 수 없는 변수

var : variable, 초기값이 할당된 이후에도 값을 바꿀 수 있는 변수

 

 

val(또는 var) 변수명: 타입 = 값

 

명시적으로 변수 타입을 입력한 경우 해당 타입으로 변수가 선언, 그렇지 않을 경우 대입한 값에 따라 자동으로 해당하는 타입이 됨.

 

 

초기값 할당

- 최상위에 선언한 변수, 멤버 변수는 선언과 동시에 초기값을 할당해야함

- 함수 내부에 선언한 변수는 초기값을 할당하지 않아도 되나 변수 사용 시 값을 할당 후 사용해야함(클래스 내부 제외)

 

초기화 미루기

- 변수 선언시 초기값 할당을 나중에 할 것이라고 명시적인 키워드를 입력

lateinit : 선언과 동시에 초기값을 할당하지 않아도 되지만 var 형으로 선언한 변수에만 사용 가능하고 Int, Long, Short, Double, Float, Boolean, Byte 타입에는 사용이 불가

 

lateinit var name: String // 가능
lateinit val name: String // 불가
lateinit var name: Int // 불가

 

lazy : 변수 선언문 뒤에 by lazy {} 형식으로 선언, 소스에서 변수가 최초로 이용되는 순간에 중괄호로 묶인 부분이 실행되어 결과값이 변수의 초기값으로 할당됨. val 형으로 선언한 변수에만 사용 가능

 

val data: Int by lazy {
    println("in lazy..")
    10
}

fun main(){
    println("in main")  
    println(data + 10)  // 20
    println(data + 20)  // 30
    println(data + 30)  // 40
}

 

 

데이터 타입

- 코틀린의 모든 변수는 객체이므로 객체의 메서드를 이용할 수 있다

 

var data2: Int = 1

fun main(){
    println(data2)			// 1
    data2 = data2.plus(4)
    println(data2)			// 5
}

 

 

null 허용

- 코틀린의 변수는 객체이므로 null 할당이 가능

- 변수 선언 시 null을 대입할수 있는 nullable 변수인지 아닌지 구분해서 선언해야함

 

var data1: Int? = 1 // nullable
var data2: Int = 1  // not null

 

 

null 값을 다루는 방법

안전한 호출 연산자(?.) : 변수의 null 여부를 검사하고 null이 아닌 경우에만 메서드나 속성에 접근

 

val length = data?.length // data가 null이 아니면 length를 반환하고, null이면 null을 반환

 

 

엘비스 연산자(?:) : 변수가 null인 경우 디폴트 값을 지정할 수 있음

 

val length = data?.length ?: 0 // data가 null이면 0을 반환하고, 아니면 length를 반환

 

 

null 가능 타입 변환 연산자(!!) : 변수가 null이 아님을 확신할 때 사용, 만약 null이면 예외가 발생

 

val length = data!!.length // data가 null이면 NullPointerException 발생
728x90