Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

[TIL]20241018 const 와 val의 차이 본문

Kotlin

[TIL]20241018 const 와 val의 차이

최밤빵 2024. 10. 19. 05:52

코틀린에서 변수를 선언할 때 불변성을 보장하는 두 가지 방식이 있다. const 와 val. 이 두 방식은 변수의 값을 한 번 설정한 후 변경할 수 없다는 공통점을 가지고 있지만, 그 동작 시점과 사용 방식에는 큰 차이가 있다.

 

▶val의 특징

val은 런타임에서 한 번 값이 할당된 후 변경할 수 없는 런타임 상수를 의미한다. val로 선언된 변수는 프로그램이 실행된 이후 값이 결정되며, 그 이후에는 값을 변경할 수 없다. 이는 자바의 final 변수와 비슷한 개념이다.

하지만 중요한 점은 val은 런타임에 값을 할당할 수 있다는 점이다. 예를 들어 함수 호출 결과나 외부 데이터베이스에서 값을 가져와 val 변수에 할당하는 것이 가능하다. 프로그램 실행 중에 동적으로 값이 할당될 수 있다.

 

▷예시: val

val currentTime = System.currentTimeMillis()  // 현재 시간을 할당
val userName = getUserInput()  // 사용자 입력을 통해 값 할당

→ 위 코드는 프로그램이 실행될 때 동적으로 값을 할당받는 경우로, val 변수는 한 번 할당된 후에는 값이 변경되지 않지만, 프로그램 실행 중에 값이 설정된다는 특징이 있다.

 

▶const의 특징

const는 컴파일 타임 상수이다. 이는 값이 컴파일 시점에 결정되며, 프로그램이 실행되기 전에 값이 고정된다. 따라서 const로 선언된 변수는 절대로 변경되지 않으며, 프로그램 실행 중에도 그 값이 불변이다.

또한 const는 리터럴 값만을 허용한다. 함수 호출이나 복잡한 연산을 통해 값을 할당할 수 없으며, 반드시 고정된 값을 설정해야 한다. const는 주로 객체 내의 상수전역 상수로 사용된다.

 

▷예시: const

const val PI = 3.14159
const val API_URL = "https://api.example.com"

→ PI와 API_URL이 모두 컴파일 시점에 고정된 값으로 설정되었다. 이러한 상수는 절대로 변경되지 않으며, 프로그램 전체에서 안전하게 사용할 수 있다.

 

▶val과 const의 차이점

구분 val const
값이 결정되는 시점 런타임에 결정 (프로그램 실행 중에 할당 가능) 컴파일 타임에 결정 (프로그램 실행 전 값 고정)
값 할당 가능 여부 함수 호출, 외부 데이터 참조 가능 리터럴 값만 할당 가능
사용 가능한 위치 클래스 멤버, 로컬 변수 모두 가능 반드시 object나 companion object 내부
변경 가능 여부 할당 후 변경 불가 절대 변경 불가
주 사용 목적 동적 불변 변수 고정 상수 정의 (프로그램 전역에서 사용)

 

▶사용 상황에 따른 선택

val은 동적으로 결정되지만 한 번 결정된 이후에는 변경되지 않는 불변 변수를 선언할 때 사용한다. 예를 들어, 사용자 입력 값, 계산된 값, 함수 호출 결과 등을 다룰 때 적합하다. val은 값이 변경되면 안 되지만, 할당 시점에서 동적이기를 원할 때 사용한다. const는 절대로 값이 변경되지 않고, 프로그램 전반에서 동일한 값을 고정적으로 사용할 때 적합하다. 특히 상수 값이나 설정 값을 선언할 때 const를 사용하면 프로그램이 컴파일 타임에 그 값을 확정짓고, 안정성을 더할 수 있다.

 

▶예시로 보는 const와 val의 차이

 

▷val을 사용하는 경우

fun getCurrentTime(): Long {
    return System.currentTimeMillis()
}

val currentTime = getCurrentTime()  // 실행 시점에 현재 시간이 할당됨

→ currentTime 변수가 프로그램 실행 중에 할당된다. 함수 호출을 통해 현재 시간을 받아오는 작업은 런타임에서 수행되므로 val을 사용해야 한다.

 

▷const를 사용하는 경우

const val MAX_LOGIN_ATTEMPTS = 5
const val BASE_URL = "https://api.example.com"

→ MAX_LOGIN_ATTEMPTS와 BASE_URL은 고정된 값으로 프로그램 전체에서 절대로 변경되지 않도록 해야 한다. 이러한 경우에는 const를 사용하여 컴파일 타임에 값을 확정 짓고, 프로그램이 실행되는 동안 이 값들을 사용한다.

 

▶자주 발생하는 실수와 주의점

val을 사용할 때 값이 컴파일 타임이 아닌 런타임에 결정된다는 점을 놓치지 말아야 한다. val을 사용한 변수는 프로그램 실행 중에 할당되기 때문에, 할당 과정에서 예기치 않은 오류나 값 변경이 발생할 수 있다. const를 사용할 때는 고정된 값만 할당할 수 있으며, 함수 호출이나 계산된 값을 할당할 수 없다는 점을 명심해야 한다. 이를 혼동하여 const에 동적 값을 할당하려 하면 컴파일 에러가 발생한다.

 

코틀린에서 val과 const는 각각 불변성을 가진 변수를 선언할 때 사용하는 중요한 키워드이다. val은 런타임에서 값이 결정되고, 한 번 할당된 이후에는 값을 변경할 수 없는 반면, const는 컴파일 시점에 고정된 상수로 절대 변하지 않는 값을 선언하는 데 사용된다. 개발자는 상황에 맞게 val과 const를 선택하여 사용해야 하며, 동적이지만 불변인 값은 val을, 고정된 상수는 const로 선언하여 프로그램의 안정성과 성능을 높일 수 있다. 이를 통해 코드의 가독성을 높이고, 잠재적인 버그 발생 가능성을 줄일 수 있다.

'Kotlin' 카테고리의 다른 글

[TIL]20241020 Type Alias  (1) 2024.10.20
[TIL]20241019 비트연산자  (0) 2024.10.19
[TIL]20241017 const  (0) 2024.10.17
[TIL]20241016 정규표현식(Regex)  (0) 2024.10.16
[TIL]20241015 if-else 표현식  (0) 2024.10.15