Programming Language/Kotlin
[Kotlin] var, val 차이 간단 정리
Tenacity_Dev
2023. 7. 4. 16:58
728x90
var, val 이란
val : 불변 변수로, 값의 읽기만 허용되는 변수. Value의 약자이다.
var : 가변 변수로 값의 읽기와 쓰기가 모두 허용되는 변수, Variable의 약자이다.
변수는 값을 저장하는 메모리 공간에 붙는 이름이다.
코틀린에는 두가지의 형을 지원하게 되는데 위에서 설명한 val과 var이다.
위에서 설명한 것 처럼 val과 var은 각각 불변 변수와 가변 변수를 나타내고 있고, 공통적으로 초기화시에 값을 할당하지 않는다면 반드시 Type명시해야한다. 다만 컴파일러가 변수 탕비을 추론할 수 있는 경우에는 Type를 생략해도 된다.
val
- val로 지정된 불변 타입 변수는 초기에 값을 할당되면 나중에 값을 변경할 수 없다. 강제로 변수를 변경하려고 한다면 컴파일 에러가 발생한다.
- 즉, 값을 초기화만 가능하고 변경은 불가능하다. Java에서는 final과 같다.
- val은 한번만 초기화 되며 값을 변경할 수 없지만 컴파일러가 코드 문맥을 확인시 val 변수가 한번만 초기화 되는것이 맞다면 개발자가 상황에 따라 val를 여러 값으로 초기화(할당) 할 수 있다. (ex) flow에서 update
- val은 초기화 후 값을 변경이 불가능한 것이 맞지만 변수의 참조가 가리키는 객체의 내부 값은 변경이 가능하다.
// val 변수 선언하기
val CHANGE_NO = 100
println(CHANGE_NO)
//CHANGE_NO = 200 // val cannot be reassigned
val SCHOOL_NAME = "대한민국 학교"
println(SCHOOL_NAME)
var
- var로 지정된 가변 타입 변수는 초기화 후 값을 변경이 가능.
- 하지만, 다른 타입의 값을 넣을 수는 없습니다. 처음에 String 타입으로 초기화를 한뒤 Int 타입의 값을 넣을수는 없다.
- 그렇다고 해당 변수를 뒤에서 Int 타입으로 재정의 한다면 타입 미스매치(Type mismatch) Error가 발생합니다.
이미 정의된 타입을 변경하려면 자바와 같이 형변환을 해야합니다.(cast)
// var 변수 선언하기
var changeYes = 100
//var changeYes // 선언과 동시에 초기화를 시켜줘야 한다
println(changeYes)
changeYes = 200
println(changeYes)
참고
https://velog.io/@jojo_devstory/Kotlin-val-var%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90
728x90