1. 식별자란?
식별자는 프로그램을 이루는 요소를 가리키 위해 사용한다. 데이터를 가리키는 식별자를 사용 할 때 기본적으로 선택하는 두 가지 사항이 존재합니다.
- 식별자가 가리키는 내용이 프로그램 실행 동안 변할 수 있는가?
- 단 한번만 어떤 값을 지정하면 그 이후 변하지 않는가?
코틀린에서는 이런 변경 가능성을 두 가지의 키워드를 통해서 제어합니다.
2. var과 val
코틀린에서는 식별자의 변경 가능성을 다음 두 키워드로 구분합니다.
- var : 가변(mutable) 변수, 값을 변경할 수 있다.
- val : 불변(immutable) 변수, 값을 단 한번만 초기화할 수 있다. (초기화 이후 내용 변경 불가)
가장 먼저 var에 대해 알아보자면 변할 수 있는 수로 값을 여러 번 재할당하거나 연산을 통해 수정할 수 있습니다.
fun main() {
var a = 1
a += 2
a += 4
println(a)
}
참고로 코틀린에서는 문장 끝에 세미콜론(;)을 붙이지 않아도 된다.
var은 가변형 수이기 때문에 위와 같은 코드를 실행하면 초기에는 a의 값이 1이였지만 이 후 연산을 통해 a의 값이 7된 것을 확인할 수 있습니다.
val 키워드는 불변 변수로, 값을 한 번만 초기화할 수 있습니다.
val 키워드로 선언된 a의 값에 새로운 값을 대입하려하면 Val cannot be reassigned라는 경고메시지 처럼 val은 재할당될 수 없다는 경고메시지를 볼 수 있습니다.
불변 식별자를 사용하는 이유?
- 코드 안정성: 값이 변하지 않으므로 예기치 않은 변경으로 인한 오류를 방지
- 명확성: 코드의 동작을 더 쉽게 이해 가능
- 안전성: 멀티스레드 환경에서도 데이터를 안전하게 공유 가능
따라서, 프로그램이 복잡해질수록 val을 우선적으로 사용하고, 필요한 경우에만 var를 사용하는 것이 좋습니다.
3. 데이터 타입
타입은 데이터를 어떻게 사용할지를 정의합니다. 이는 데이터에 적용할 수 있는 연산, 데이터의 의미, 그리고 저장 방식 등을 결정합니다.
코틀린에서 데이터 타입을 사용하는 방식은 크게 두 가지입니다:
- 타입 추론: 코틀린이 자동으로 변수의 타입을 결정.
- 명시적 타입 선언: 개발자가 직접 타입을 지정.
3 - 1 타입 추론(Type Inference)
코틀린은 변수를 선언할 때, 초기화된 값을 기반으로 변수의 타입을 추론하는데 이 것을 타입 추론이라고 합니다.
fun main() {
val a = 1 + 1.1
println(a) //(Double 타입으로 추론)
}
위의 식처럼 a를 계산할 때 Int와 Double을 더하면 코틀린은 타입 추론을 통해 결과 값이 Double임을 결정하고 생성된 결과가 Double에 대한 규칙을 준수하는지 확인하게 됩니다.
fun main() {
var a = 20 // Int로 추론
a = 30 // 가능
a = 3.1 //오류
println(a)
}
위 코드에서 a는 처음 선언될 때 Int로 추론되었으므로, Double 값을 대입하려고 하면 컴파일 오류가 발생하게 됩니다.
그렇다면 타입을 설정할 때 타입 추론을 통해서만 가능할까요? 코틀린은 직접적으로 타입을 명시할 수도 있습니다.
3 - 2 명시적 타입 선언
타입을 명확하게 지정하고 싶다면 다음과 같은 구문을 통해 타입을 선언하면 됩니다.
val 식별자: 타입 = 초기화
fun main() {
val a : Int = 2
val b : Double = 1.2
val c : String = "안녕"
}
이처럼 타입을 명시적으로 지정하면 코드를 읽는 사람이나 컴파일러 모두 변수의 타입을 명확히 알 수 있어 실수를 줄일 수 있습니다.
4. 총 정리
- 식별자는 프로그램의 요소를 가리키는 이름
- 코틀린은 var(가변)과 val(불변) 키워드를 사용해 변수의 변경 가능성을 제어한다.
- 데이터 타입은 자동으로 추론되거나 명시적으로 선언될 수 있으며, 올바른 타입 사용은 코드 안정성과 가독성을 높이는 데 중요하다.
'Kotlin 정리' 카테고리의 다른 글
[Kotlin 공부 6일차] 오버로딩, when (0) | 2024.12.06 |
---|---|
[Kotlin 공부 5일차] 확장 함수, 이름 붙은 인자와 디폴트 인자 (0) | 2024.12.04 |
[Kotlin 공부 4일차] 객체, 클래스, 생성자 (0) | 2024.12.02 |
[Kotlin 공부 3일차] 루프와 범위 (0) | 2024.11.29 |
[Kotlin 공부 2일차] 코틀린에서 함수와 조건문(if), 문자열 템플릿 다루기 (0) | 2024.11.28 |