변수란
- 문자열, 숫자 또는 다른 값이 될 수 있는 값의 저장소 이다 (storage for a value).
- 모든 변수는 이름, 식별자(name, Identifier) 로 구분 한다.
변수 선언
- 코틀린에서는 변수 선언에 대해 두 keyword 가 있다.
- keyword 없이 변수를 선언할 수 없다.
val IDE = IntelliJ
(O)IDE = "IntelliJ"
(X)
val
- immutable variable (constant) 로, 한번 선언하면 값을 바꿀 수 없다.
const
와 함께 사용하면 컴파일 타임에 선언되는 상수를 만들 수 있다. 이 값은 런타임에 바뀌지 않는다.
var
- mutable variable 로 값을 얼마든지 바꿀 수 있다.
val, var 선언하고 출력하기
// val 선언하기
val IDE = "IntelliJ"
// var 값 변경하기
var language = "JavaScript"
language = "Kotlin"
// 한 줄에 하나씩 출력된다
println(IDE) // IntelliJ
// 이어서 출력된다
print(IDE)
print(language) // IntelliJKotlin
컴파일 타임에 선언되는 변수 선언하기 (const val)
- main 함수 밖에서 선언 되어야 한다.
const val xx = y
로 선언하면 컴파일 타임에 선언되는 상수 를 만들 수 있다. 이 값은 런타임에 바뀌지 않는다.- 선언과 동시에 값을 할당해야 한다. 선언만 해둘 수 없다.
const val MY_INT_1 = 1024
// 선언과 동시에 할당이 이루어져야 한다.
const val MY_INT_2; // ERROR, Property must be initialized
fun main() {
// main 함수 밖에다 선언해야 한다
const val MY_INT_2 = 2048 // ERROR, Modifier 'const' is not applicable to 'local variable'
}
할당 전에 사용하는 것은 안된다
- JavaScript 와 달리, Kotlin 은 할당 전에 사용할 수 없다. 만약 사용하게 되면, 컴파일러에서
Variable xx must be initialized
라는 에러를 띄운다.
val myVal1: String
var myVar1: String
print(myVal1) // ERROR, not initialized
print(myVar1) // ERROR, not initialized
myVal1 = "myVal1"; // initialized
myVar1 = "myVar1"; // initialized
// 물론 위에서 에러가 났기 때문에 실행은 안된다
print(myVal1) // myVal1
print(myVar1) // myVar1
val 과 Mutability 에 대해서 (val 로 mutable 한 배열을 선언하면, 값을 바꿀 수 있을까?)
The val keyword does not prohibit changing the internal state of the list, it only prohibits reassigning the variable.
val
은Immutable
과 동의어가 아니다. 새로운 값을 할당을 못하는 것이다.- 아래 예시처럼 val 로 선언하였어도, 배열에 값 추가가 가능하다. 다만 다시 새롭게 할당을 못할 뿐이다.
// list 생성
val myMutableList = mutableListOf(1, 2, 3, 4, 5)
myMutableList.add(6) // 가능하다
println(myMutableList) // [1, 2, 3, 4, 5, 6]
// Val cannot be reassigned 라는 에러가 발생한다
myMutableList = mutableListOf(1, 2, 3, 4, 5, 6) // error 발생
참고 자료
https://hyperskill.org/learn/step/4371
'코틀린 Kotlin' 카테고리의 다른 글
프로그램 (Program) 용어 및 톺아보기 (0) | 2023.02.03 |
---|---|
정수 (Integer numbers), 문자 (Characters), 문자열 (Strings) (0) | 2023.02.03 |
코틀린 이란 (0) | 2023.02.03 |