빠르게 살펴보기
var/val 변수명: 변수타입 = 초기화
ex) var name: String = "name"
변수타입 변수명 = 초기화;
ex) String name = "name";
문법만 생소할 뿐 Java 또는 다른 프로그래밍 언어를 접해봤다면 변수타입은 기존 언어와 별반 차이가 없어서 쉽게 사용할 수 있습니다.
앞서 살펴본 키워드 중 생소한 부분은 var/val 키워드 일 것입니다. 간략히 정리하면 다음과 같습니다.
var = variable = 읽기/쓰기가 가능한 일반 변수
val = valuable = 읽기만 가능한 final 변수
이 역시 Java의 final 변수에 대한 개념을 알면 금방 이해할 수 있습니다.
var로 선언하면 변수의 값을 변경할 수 있습니다. 이러한 변수를 가변 변수라고 부릅니다. 반대로 val을 선언한 변수는 값을 변경할 수 없고 불변 변수라고 부릅니다.
fun main(args: Array<String>) {
var name:String = “name”
val address:String = “seoul”
println(“name = $name”)
name = “kotlin”
//address = “busan” 불변 변수이므로 값 변경 안됨
println(“name = $name”)
}
위 예제와 같이 var로 선언한 가변 변수인 name은 새로운 값으로 할당이 가능합니다. 하지만 불변 변수인 address는 새로운 값을 할당할 수 없습니다.
특이한 점은 코틀린에서는 Non-null 타입과 Nullable 타입이 존재합니다.
null을 값으로 가질 수 있으면 Nullable, null을 값으로 가질 수 없으면 Non-null 타입입니다.
var name: String = null // 에러
얼핏 보면 이상할 것이 없는 위 코드는 에러가 발생합니다. 그 이유는 해당 String 변수는 Non-null 타입이기 때문입니다. Non-null 타입은 앞서 말했듯이 null을 값으로 가질 수 없습니다.
Nullable로 선언하는 방법은 다음과 같습니다.
var name: String? = null
Nullable String 변수를 선언하려면 위와 같이 변수타입 뒤에 ?를 꼭 붙여야 합니다.
Nullable 타입은 사용 시 안전 호출 연산자인 ?. 을 통해 안전 호출을 합니다.
안전 호출 연산자의 역할은 호출하는 객체의 null 여부를 판별해 null이 아니면 속성을 참조하거나 메서드를 호출합니다. 만약 null이라면 null을 리턴합니다.
fun main(args: Array<String>) {
val firstName: String? = null
val lastName: String = "Seo"
print("${firstName?.length}, ${lastName?.length}")
}
(위와 같이 Non-Null 타입도 안전 호출 연산자를 쓸 수 있지만 유의미하지 않습니다.)
예를 들어 firstName?.length를 자바로 표현하면 다음과 같습니다.
if (firstname != null) {
firstname.length();
} else {
null;
}
코틀린
println("텍스트 $변수")
Java
System.out.println("텍스트 " + 변수);
$를 출력하고 싶으면 $$로 하면 되겠죠?
이제 변수 선언하는 방법을 알기 때문에 변수 타입을 Int, Long 등으로 변형해서 다양하게 사용할 수 있습니다.
fun main(args: Array<String>) {
var language: String = "Kotlin" // Java => String language = "Kotlin";
var version = "1.1.51" // 자동 유추 : String
println("language $language") // System.out.println("language " + language);
println("version $version")
//var empty: String = null // Non-null 타입은 null을 값으로 가질 수 없음
var empty: String? = null // null 타입으로 선언하기 위한 키워드로 물음표 사용
println("empty : ${empty?.length}") // null check 필수
empty = "ABC"
println("empty : ${empty.length}") // null check 안 해도 가능
println("empty : ${empty?.length}") // null check을 해주는 것이 좋음
val ch10 = 10 // Java => final int ch10 = 10;
// ch10 = 9 // val cannot reassigned
val WIFI_STATE: String = "WIFI_STATE" // final String WIFI_STATE = "WIFI_STATE";
}
language Kotlin
version 1.1.51
empty : null
empty : 3
empty : 3