카테고리 없음

Kotlin 함수 인자 내부에서 값 수정하기 (Android Studio 기준)

파란하늘999 2025. 12. 11. 00:18

Kotlin을 공부하다 보면 함수 인자를 함수 안에서 직접 수정하고 싶을 때가 있죠.

하지만 Kotlin은 기본적으로 함수 인자를 **불변(val)**으로 취급해서 직접 재할당이 안 됩니다.

 

이 글에서 그 이유와 해결 방법을 자세히 정리해 보았어요.

 

문제 상황: 인자를 직접 수정하려면?

fun increment(number: Int) {
    number += 1  // 컴파일 에러! number는 val이라 수정 불가
}

Kotlin의 함수 파라미터는 기본적으로 **읽기 전용(val)**입니다. Java처럼 intInteger로 바꾸거나 pass-by-reference로 강제할 수 없어요.

 

해결 방법 4가지

1. 지역 변수(var)로 복사해서 사용 (가장 추천!)

인자를 수정해야 한다면 함수 안에서 var로 복사하세요. Kotlin의 불변성을 지키는 가장 좋은 방법입니다.

fun increment(number: Int) {
    var mutableNumber = number  // 복사
    mutableNumber += 1
    println(mutableNumber)  // 출력: 원래 값 + 1
}
 

2. Mutable한 객체 사용 (참조 타입)

기본 타입(Int, String 등)이 아닌 클래스나 컬렉션을 인자로 넘기면 내부 프로퍼티는 수정 가능합니다.

class Counter(var value: Int)

fun increment(counter: Counter) {
    counter.value += 1  // OK! 객체 내부 var 프로퍼티
}

val c = Counter(10)
increment(c)
println(c.value)  // 11
  • MutableList, MutableMap 등도 동일하게 내부 요소 추가/수정 가능
  • 불변 List는 안 됨!
 

3. 배열(Array) 사용

배열은 참조 타입이라 내용 수정 가능합니다.

fun modifyArray(arr: Array<Int>) {
    arr[0] = 999  // OK!
}

4. vararg나 기타

vararg도 내부에서는 불변 배열로 취급되니 복사해서 사용하세요.

요약 테이블

방법 적용 타입 인자 자체 수정 내부 내용 수정 추천도
var 지역 변수 복사 모든 타입 - 가능 (복사본) ★★★★★
Mutable 객체 사용 클래스, 컬렉션 불가능 가능 ★★★★
Array 사용 배열 불가능 가능 ★★★★
직접 수정 시도 - 불가능 - 불가능
 

결론

Kotlin에서 함수 인자를 수정하고 싶다면 인자 자체를 건드리지 말고, 내부에서 var로 복사하거나 mutable 객체를 활용하세요.

이게 Kotlin의 철학(불변성 우선)을 따르는 깔끔한 코딩 스타일입니다!

반응형