← 아카이브로 돌아가기

Development · Swift

Swift inout 매개변수 이해하기

값 타입 매개변수를 함수 안에서 변경하는 inout의 사용법과 copy-in copy-out 동작을 살펴봅니다.

Velog 원문 보기 ↗

Development 아카이브 표지

함수에 넘긴 값을 안에서 바꿨는데 호출부의 값은 그대로인 상황은 값 타입의 전달 방식을 생각하면 자연스럽다. 원본까지 변경해야 할 때 사용하는 inout이 실제로 어떤 순서로 동작하는지 정리했다.

In-Out 파라미터

Swift에서 함수의 파라미터는 기본적으로 값(Value)으로 복사되어 전달되어, 함수 내부의 파라미터에 대한 변경은 함수 외부에 영향을 주지 않는다. inout 키워드를 통해 해당 변수의 참조(Reference)를 전달하여 함수 내에서 직접 변경할 수 있다.

var a = 2
var b = 3

func swapInt(_ a: inout Int, _ b: inout Int) {
    let temp = a
    a = b
    b = temp
}

swapInt(&a, &b) // a는 3, b는 2

함수를 호출할 때 파라미터에 &를 사용하여 변수의 주소값을 전달해야 한다.

In-Out 원리

inout은 copy-in copy-out의 줄임말로, 파라미터가 함수 호출 시 값의 복사본을 만들어 전달하고, 함수 내에서 변경된 값을 다시 복사하여 원본 변수에 할당하는 방식으로 작동한다.

  1. 함수가 호출되면 파라미터로 넘겨진 변수가 복사된다.
  2. 함수 내부에서 복사한 값을 수정한다.
  3. 함수 종료 시에 변화된 값을 원본 변수에 재할당한다.
← 아카이브로 돌아가기