Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

[TIL]20241004 var과 val 의 차이? 본문

Kotlin

[TIL]20241004 var과 val 의 차이?

최밤빵 2024. 10. 4. 19:54

▶var과 val의 차이

varval은 코틀린에서 변수를 선언할 때 사용하는 두 가지 키워드이다. 이들은 모두 변수를 선언하는 데 사용되지만, 값의 변경 가능 여부에 따라 다르게 동작한다.

 

→ var:

변수에 저장된 값을 변경할 수 있는 가변(mutable) 변수이다.

→ val:

변수에 저장된 값을 변경할 수 없는 불변(immutable) 변수이다.

 

자바에서는 변수를 선언할 때 기본적으로 값을 변경할 수 있지만, final 키워드를 사용하여 변수의 값을 한 번만 할당하고 변경하지 못하게 할 수 있다. 코틀린에서는 이 개념을 좀 더 명확하게 구분하기 위해 var과 val을 제공한다. 자바와 비교하자면, 'var'는 일반 변수, 'val'은 final 키워드가 적용된 변수라고 볼 수 있다.

 

▶var

var 키워드를 사용하면 변수를 선언하고 나중에 그 값을 변경할 수 있다. 변수가 가변적이고, 필요에 따라 값을 재할당할 수 있다.

fun main() {
    var name = "John"  // 문자열 "John"을 할당해준다. 
    println(name)      // 출력: John

    name = "Doe"       // 값 변경
    println(name)      // 출력: Doe
}

→ var로 선언된 name 변수는 처음에 "John"이라는 값을 가지고 있지만, 이후 "Doe"로 값을 변경할 수 있다. 자바의 일반적인 변수와 동일한 동작이다.

 

▶val

val 키워드는 불변 변수를 선언할 때 사용된다. 한 번 값이 할당되면 더 이상 값을 변경할 수 없다. 자바에서의 final과 유사하게, val로 선언된 변수는 값을 재할당할 수 없다.

fun main() {
    val age = 25    // 정수 25를 할당
    println(age)    // 출력: 25

    // age = 30    // 컴파일 에러: val 변수는 값을 변경할 수 없다.
}

→ val로 선언된 age 변수는 25라는 값을 가지고 있고, 이후 값을 변경하려고 하면 컴파일 에러가 발생한다.자바에서 final 변수를 선언한 것과 동일한 동작을 보인다.

 

▶var과 val 사용에 대한 권장 사항

코틀린은 가능한 한 불변(immutable) 변수를 사용하는 것을 권장한다. 변경할 필요가 없는 값은 항상 val로 선언하는 것이 좋다. 이렇게 하면 코드의 가독성이 향상되고, 의도치 않은 값 변경을 방지할 수 있기 때문이다. 불변성은 코드에서 많은 이점을 제공하고, 특히 동시성 문제를 줄이는 데 도움이 된다.

예를 들어, 변수를 선언할 때, 값이 변경되지 않을 경우 val을 사용하여 불변으로 선언한다.

값을 변경해야 하는 경우에만 var을 사용하여 가변 변수로 선언한다.

 

▶val이 불변이지만, 객체는 불변이 아니다

val로 선언된 변수가 항상 완전히 불변은 아니다. 참조가 불변일 뿐이지, 객체 자체는 불변일 필요는 없다는 것을 의미한다.  val로 선언된 객체의 속성은 변경할 수 있다. 

fun main() {
    val person = Person("John", 25)
    person.age = 30  // 객체의 속성 변경은 가능!
    println(person.age)  // 출력: 30
}

→ val로 선언된 person은 참조는 변경할 수 없지만, Person 객체의 age 속성은 변경할 수 있다. 코틀린에서 참조와 객체의 불변성을 구분하는 중요한 부분! 

 

▶var과 val을 적절히 사용하기

→ 불변 데이터:

값이 변하지 않을 경우 val을 사용해 불변으로 선언한다. 불변 변수를 사용하면 코드가 더 예측 가능해지고, 의도치 않은 값 변경으로 인한 오류를 방지할 수 있다.

→ 가변 데이터:

값이 변할 가능성이 있을 경우에만 var을 사용해 가변으로 선언한다. 하지만 var을 남용하면 코드가 예측하기 어려워질 수 있으므로, 최소한으로 사용하는 것이 좋다.

 

var은 가변 변수를, val은 불변 변수를 의미하며, 자바의 일반 변수와 final 변수에 각각 대응된다. 코틀린은 가능한 한 불변 변수를 사용하도록 권장하여 코드의 안정성을 높이고, 오류를 줄일 수 있다.