Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

코틀린(Kotlin) const와 val의 차이점, 예제로 쉽게 이해하기

코틀린 const와 val, 무엇이 다를까?

코틀린(Kotlin)에서는 한 번 값을 할당하면 더 이상 변경할 수 없는 읽기 전용(read-only) 변수를 선언할 때 constval 두 가지 키워드를 사용합니다. 두 키워드 모두 불변성(immutability)과 관련이 있지만, 초기화 시점과 사용 가능한 범위에서 중요한 차이가 있습니다. 이 글에서는 두 키워드의 특징과 차이점을 예제 코드와 함께 살펴보겠습니다.

const 키워드란?

const는 애플리케이션의 전체 생명 주기(lifecycle) 동안 값이 절대 변하지 않는 경우에 사용합니다. 즉, const는 클래스의 불변 속성(immutable property)에만 적용되며, 쉽게 말해 클래스의 읽기 전용 프로퍼티를 선언할 때 활용하는 키워드입니다.

다만 const 변수에는 몇 가지 제약 조건이 따릅니다.

  • const는 클래스의 불변 속성에만 적용할 수 있습니다.
  • 함수 호출 결과나 클래스 생성자로 초기화할 수 없으며, 반드시 기본형(primitive) 데이터 타입이나 String으로 값을 할당해야 합니다.
  • const 변수는 컴파일 시점(compile-time)에 초기화됩니다.

const 사용 예제

아래 예제에서는 const 변수를 선언하고 애플리케이션에서 사용하는 방법을 보여줍니다.

const val sName = "tutorialspoint"
// 아래 코드는 오류를 발생시킵니다.
// 함수 호출 결과로는 const를 사용할 수 없기 때문입니다.
// const val myFun = MyFunc()

fun main() {
println("Example of Const-Val--->" + sName)
}

실행 결과는 다음과 같습니다.

Example of Const-Val--->tutorialspoint

val 키워드란?

val 역시 코틀린에서 변수를 선언할 때 사용하는 키워드입니다. "val""const val" 모두 클래스의 읽기 전용 프로퍼티를 선언하는 데 쓰이지만, val로 선언된 변수는 런타임(runtime) 시점에 초기화된다는 점이 다릅니다.

  • val은 클래스의 불변 속성을 다루며, 읽기 전용 변수만 선언할 수 있습니다.
  • val은 런타임 시점에 초기화됩니다.
  • val은 참조 자체는 불변이지만 객체의 내부 내용은 변경(mutate)될 수 있습니다. 반면 const val은 컴파일 타임 상수이므로 어떤 형태의 변경도 허용되지 않습니다.

val 사용 예제

앞선 예제를 수정하여 val로 함수 호출 결과를 할당해 보겠습니다. 런타임에 어떤 오류도 발생하지 않습니다.

const val sName = "tutorialspoint"

// val은 함수 호출 결과를 할당할 수 있습니다.
val myfun = MyFunc()

fun main() {
println("Example of Const-Val--->" + sName)
println("Example of Val--->" + myfun)
}

fun MyFunc(): String {
return "Hello Kotlin"
}

코드를 실행하면 다음과 같은 출력이 생성됩니다.

Example of Const-Val--->tutorialspoint
Example of Val--->Hello Kotlin

const와 val 비교 요약

구분const valval
초기화 시점컴파일 시점런타임 시점
할당 가능한 값기본형 타입 또는 String 리터럴모든 타입(함수 호출 결과 포함)
사용 위치최상위 수준 또는 객체(동반 객체 포함) 내부클래스, 함수 내부 등 어디서든
내용 변경불가능참조는 불변이나 객체 내부 변경 가능

정리하면, 값이 절대 변하지 않고 컴파일 시점에 확정되는 상수라면 const val을, 그 외 일반적인 읽기 전용 변수라면 val을 사용하는 것이 좋습니다. 두 키워드의 차이를 정확히 이해하면 더 안전하고 예측 가능한 코틀린 코드를 작성할 수 있습니다.