[Kotlin] 매개변수의 자료형 (왜 매개변수는 val이 되는가?)

이도형·2024년 7월 9일
0

에러 백과사전📚

목록 보기
3/6

코드 블럭

fun pop(register:Boolean, value:Int, index:Int): List<Any> {
    if (index == 0) {
        println("Empty")
    } else {
        index -= 1
        register = true
        value = stack[index]

    }
    return listOf(register, value, index)
}

문제 상황

다음과 같은 함수가 있다고 가정합니다.
이 때 매개변수인 register, val, index를 수정할 수 있을까요?
아쉽게도 Kotlin에서 매개변수는 val로 선언이 되어 수정할 수 없습니다.

에러 출력

Kotlin: Val cannot be reassigned

해결 과정

  1. 에러 상황 확인 : 3가지 매개변수 모두 val로 선언되는 것을 확인했습니다.

  2. Kotlin의 매개변수 자료형 인지 :
    인터넷에 검색 → Kotlin의 매개변수는 val로 선언된다는 것을 인지했습니다.

  3. 새로운 변수를 선언하여 문제 해결 :
    매개변수 앞에 _를 붙여서 함수에 받았습니다.
    → 새로운 변수 var을 선언했습니다.
    → 새로운 변수로 값을 변경한 후
    → 변경된 값을 반환하였습니다.

수정된 코드

fun pop(_register:Boolean, _value:Int, _index:Int): List<Any> {

    var register = _register
    var value = _value
    var index = _index

    if (index == 0) {
        println("Empty")
    } else {
        index -= 1
        register = true
        value = stack[index]
    }
    return listOf(register, value, index)
}

더 알아볼 점

참고 : https://blog.jetbrains.com/kotlin/2013/02/kotlin-m5-1/

(원래 Kotlin의 매개변수는 일부분 변경 가능하였으나, Kotlin M5.1부터 모든 변수는 Immutable(변경 불가능)하게 되었습니다.)

언어의 규칙을 잘 알아보고 항상 Clean Code를 작성하자!🎉

profile
열심히 살고 싶습니다! 일하고 싶습니다 :)

0개의 댓글