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

함수에 넘긴 값을 안에서 바꿨는데 호출부의 값은 그대로인 상황은 값 타입의 전달 방식을 생각하면 자연스럽다. 원본까지 변경해야 할 때 사용하는 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의 줄임말로, 파라미터가 함수 호출 시 값의 복사본을 만들어 전달하고, 함수 내에서 변경된 값을 다시 복사하여 원본 변수에 할당하는 방식으로 작동한다.
- 함수가 호출되면 파라미터로 넘겨진 변수가 복사된다.
- 함수 내부에서 복사한 값을 수정한다.
- 함수 종료 시에 변화된 값을 원본 변수에 재할당한다.