Uknow's Lab.
article thumbnail

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를 쓸 것을 권장하고 있습니다.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.