
1. 코틀린의 변수 선언 및 생성
코틀린에서 변수선언인 val 혹은 var를 사용해 선언할 수 있습니다
<kotlin />
val (변수명) : (타입) = (값)
var (변수명) : (타입) = (값)
val age: Int = 30
var age2: Int = 31
// 타입은 생략 가능
val age = 30
var age2 = 31
위와 같은 형식으로 변수를 선언 및 초기화할 수 있으며,
코틀린은 타입 추론을 지원하기 때문이 타입은 생략해도 됩니다.
세미콜론은 붙이지 않아도 됩니다. 붙여도 오류는 나지 않습니다.
Java, C와 같이 역사가 깊은 프로그래밍 언어는 int age와 같이 타입 - 변수명이지만,
Kotlin, Swift, Scala 등 비교적 최근 언어는 age int 와 같이 변수명 - 타입 순으로 오곤 합니다.
2. val vs var
val과 var의 차이는 쉽게 말해 변경 가능 여부 입니다.
val은 value의 약자로, 불변(Immutable) 이며,
var는 variable의 약자로, 가변(mutable) 입니다.
<kotlin />
fun main() {
// 컴파일러의 타입 추론으로 타입은 생략 가능
val a = 30
a = 40 // 에러 발생!. 값 재할당 불가!
var b = 30
b = 40 // 정상
}
위와 같이, val로 선언된 변수에 새롭게 값을 할당하려 하면 에러가 발생합니다.
반면, var로 선언된 변수는 새롭게 값을 할당해도 별 문제 없이 값을 쓸 수 있습니다.
즉 read-only 이냐 아니냐의 차이로 볼 수 있는데, 이는 자바의 final 키워드를 붙인 변수와 같은 역할을 합니다.
3. 객체가 가르키는 내부의 값은 변경이 가능하다
<kotlin />
val arr = intArrayOf(1,2,3,4,5)
arr[2] = 5
int와 같은 primmitive 타입은 메모리 공간을 재할당하지 않고 변경할 수 없습니다.
하지만, 배열이나 리스트와 같은 객체는 메모리를 재할당하지 않고 내부의 값을 변경할 수 있습니다.
때문에 코틀린의 val은 완벽한 불변성은 아니라고도 합니다.
4. 부록. 으음... 그냥 모든 변수를 다 var로 쓰면 편하지 않나? 왜 val을 써?
코틀린을 처음 접할때 든 생각이였습니다. 다 var를 쓰면 편하잖아...?
불변성(immutability)을 쓰는 이유는 바로 안전성 때문입니다.
코틀린은 뒤에서 소개할 nullable과 같이 null 안전성과 함께 가변/불변 안전성을 고려하여 설계된 언어입니다.
프로그램 곳곳에서 변수의 무분별한 변경이 생길 경우,
프로그램이 어떻게 돌아가고 있는지 흐름을 파악하기 힘들어집니다.
최악의 경우 예기치 못한 동작을 할 수도 있죠.
이는 멀티 스레딩 환경에서는 더더욱 치명적이고요.
이를 막기 위해 수많은 프로그래머들은 변수의 변경을 제한하거나, 추적하는 방법을 연구하였습니다.
그리고 그 방법중 하나가 불변성을 다루는 것 입니다.
val과 var라는 두 가지 변수 선언 방법은, 프로그래머의 실수를 줄여줄 수 있으며,
변수를 선언할 때 프로그래머로 하여금 다시 한 번 생각하게 하여, 보다 적절한 변수를 사용하게 합니다.
코틀린을 개발한 Jetbrains에서는 가능한 모든 변수에 val을 쓰고,
꼭 필요한 경우에만 var를 쓸 것을 권장하고 있습니다.
'코틀린 파헤치기 > 1부. 코틀린 기초' 카테고리의 다른 글
[코파기 1부] 6. 코틀린과 null (.? !!. ?:) (0) | 2023.03.14 |
---|---|
[코파기 1부] 5. 코틀린과 조건문. 그리고 표현식 (0) | 2023.03.14 |
[코파기 1부] 4. 코틀린과 연산자 (0) | 2023.03.14 |
[코파기 1부] 3. 코틀린과 기본 입출력 (0) | 2023.03.14 |
[코파기 1부] 2. 코틀린과 자료형 (0) | 2023.03.14 |