Illustration by Virginia Poltrack
코틀린(Kotlin)은 JVM에서 동작하는 프로그래밍 언어로, 2011년 7월, JetBrain사가 공개하였습니다.(위키백과)
2017년 구글 I/O에서 공식언어로 지정된 후 근래 신규로 개발하는 안드로이드 앱은 대부분 코틀린으로 개발 하는 추세며, 기존에 자바로 개발하던 앱들도 코틀린으로 전환하고 있습니다.
이런 추세에 맞추어 구글 레퍼런스 API 문서에서도 예제 코드가 코틀린이 앞에 오고 자바가 뒤로 밀려난 걸 볼 수 있습니다.
기존의 자바보다 장점이 많고 자바API의 저작권을 소유한 오라클에 종속되지 않기 때문에 구글에서도 코틀린을 선택했다고 생각됩니다.
이번 주제는 코틀린의 val, var의 차이점입니다.
코틀린은 자바와는 달리 변수선언시 val과 var를 사용하며 타입선언 없이 바로 값을 할당할 수 있습니다. 물론 타입도 별도 지정이 가능합니다.
val과 var는 변수의 시작을 알리면서 변수가 불변(immutable type)인지 가변(mutable type)인지를 나타냅니다.
공통적으로 초기화시 값을 할당하지 않는다면 반드시 type을 명시해야 합니다.
하지만 컴파일러가 변수 타입을 추론할 수 있는 경우에는 타입을 생략해도 됩니다.
fun main(args: Array<String>){
// 1. val : value의 약어이며 변경 불가능(immutable)한 변수, 초기화만 가능
val name = "Kotlin"
//1-1. 위에서 이미 값이 할당 되었기 때문에 아래 코드처럼 값 할당 불가
name = "Java"
//2. 타입 지정 가능, 다만 1번처럼 컴파일러에서 타입이 추론 가능한 경우 생략 가능
val name2: String = "Swift"
//2-1. 초기화시 값을 할당하지 않을시엔 반드시 타입을 지정해야함
val name2: String
name2 = "Swift"
//3. 코드 문맥에 따라 val 변수가 1번만 초기화 되는것이 맞다면 여러 값을 초기화(할당) 가능
val name3: String
if (isSuccess()){
name3 = "Anroid"
}else{
name3 = "iOS"
}
println("name3 : $name3")
//4. 변수의 참조가 가리키는 객체의 내부 값은 변경이 가능
val nameArray = arrayListOf("Kotlin")
nameArray.add("Java")
println("nameArray : $nameArray")
}
fun main(args: Array<String>){
//1. 초기화 후 값 변경 가능
var name1 = "kotlin"
name1 = "java"
println("name1 : $name1") //출력 : java
//2. 초기화 시 타입을 지정 했다면 다른 타입의 값을 넣는 것은 불가능
var name2 = "kotlin"
name2 = 77 //Type mismatch 에러 발생
}
일반적인 이렇습니다만 인터페이스 상에서는 val과 var가 미묘하게 지금까지의 설명과는 조금 다르게 차이가 발생합니다.
해당 내용은 더 길어질거 같아 다음번에 별도로 포스팅 하도록 하겠습니다.
유용한 글 감사합니다!