계속 변하는 값이면서, 그 값을 '저장하는 공간'
특정 값을 저장하는 '메모리 공간'을 뜻한다.
var 또는 val 키워드를 붙인다.
코틀린은 자료형을 적지 않아도, 컴파일러가 스스로 자료형을 추론하기 때문에 자료형을 생략할 수 있다.
변수를 초기화하려면 변수 이름 뒤에 =를 붙이고, 할당할 값을 적는다.
변수 초기화 식이 없다면, 변수에 저장될 값에 대한 정보가 없기 때문에 컴파일러가 타입을 추론할 수 없다.
val a = 10 //컴파일러가 자동으로 Int형으로 추론
var b: Int //변수를 선언했지만, 초기화를 하지 않았기 때문에 자료형을 반드시 작성해야 한다.
자주 바뀌는 값을 정의할 때 사용 (e.g. 나이)
변수를 뜻하는 variable의 약자로, 변경 가능한 참조를 의미한다.
일반적으로 통용되는 변수
언제든지 값을 읽고 쓸 수 있다. (재할당이 가능하다)
Java의 일반 변수에 해당한다.
var 변수명1 = 값 //타입을 작성하지 않아도, 컴파일러가 알아서 추론한다.
var 변수명2: 자료형 //변수를 선언했지만, 초기화를 하지 않았다면 반드시 타입을 작성해야 한다.
변수명2 = 값2
//var a:Int = 10
var a = 10
// 변수는 아래와 같이 재할당이 가능하다.
a = 20
//var a:Char = 'ㅋ'
var a = 'ㅋ'
// 변수는 아래와 같이 재할당이 가능하다.
a = '크'
//var a:String = "ㅋㅋㅋㅋㅋ"
var a = "ㅋㅋㅋㅋㅋ"
// 변수는 아래와 같이 재할당이 가능하다.
a = "크크크크크"
변경되지 말아야 하는 값을 정의할 때 사용
값을 뜻하는 value의 약자로, 변경 불가능한 참조를 저장
읽기 전용(Read-only) 지역 변수를 정의할 때 사용하는 키워드
블록을 실행할 때(런타임시) 한 번만 초기화가 가능
Java의 final 변수에 해당한다.
코틀린은 기본적으로 모든 변수를 val 키워드를 사용해 불변 변수로 선언하고, 나중에 꼭 필요할 때만 var로 변경하기를 권장한다.
val 변수명 = 값 //타입을 작성하지 않아도, 컴파일러가 알아서 추론한다.
val 변수명2: 자료형 //변수를 선언했지만, 초기화를 하지 않았다면 반드시 타입을 작성해야 한다.
변수명2 = 값2 //이때 초기화가 진행되었으므로, 이제 값을 수정할 수 없다.
//val a:Int = 10
val a = 10
//val a:Char = 'ㅋ'
val a = 'ㅋ'
//val a:String = "ㅋㅋㅋㅋㅋ"
val a = "ㅋㅋㅋㅋㅋ"
val 변수는 변경 불가능한 참조를 저장하기 때문에 블록을 실행할 때 정확히 한 번만 초기화돼야 한다.
하지만 어떤 코드 블록이 실행될 때, 오직 한 초기화 문장만 실행됨을 컴파일러가 확인할 수 있다면 조건에 따라 val 값을 다른 여러 값으로 초기화할 수 있다.
fun main() {
val text: String //초기화를 수행하지 않음
val intRange = (1 .. 10)
var a = intRange.random()
var b = intRange.random()
text = if(a>b) "${a}가 더 크다" else "${b}가 더 크다" //if문 결과에 따라 다른 값이 들어간다.
println("${a}와 ${b} 중에서 ${text}")
}
fun main() {
val test = "abcsdf"
val result = when(test.length){ //조건에 따라 다른 문자열이 들어간다.
in 0..3 -> "짧음"
4,5,6 -> {"적당함"}
else -> "길다"
}
println(result)
}
val test = arrayListOf(1,2,3)
test.add(4)
변경되지 말아야 하는 값을 정의할 때 사용
선언시에만 초기화 가능
컴파일 시 값이 할당된다.
함수 내의 지역변수나, 클래스의 속성으로 사용할 수 없다.
참조 타입으로 선언이 불가능하다. (참조 타입은 런타임 시 객체가 할당됨)
런타임시 값이 할당된다.
클래스 생성자에도 사용 가능하다.
https://kotlinlang.org/docs/basic-syntax.html#creating-classes-and-instances
https://angangmoddi.tistory.com/187
https://angangmoddi.tistory.com/201
https://velog.io/@dabin/Kotlin%EB%B3%80%EC%88%98%EC%84%A0%EC%96%B8-val-var
https://velog.io/@thd0427/Kotlin-const-val%EA%B3%BC-val-Feat.-Companion-Object-Object
https://itstory1592.tistory.com/104