💡 인-아웃 매개변수 (In-Out Parameter)

In-Out 파라미터란 ? !

Swift에서 inout은 함수의 매개변수 선언 앞에 사용되는 키워드로, 해당 매개변수가 함수에 전달된 변수에 대한 참조를 나타냅니다.

이렇게 선언된 inout 매개변수는 함수 내에서 변수의 값을 변경할 수 있고, 변경된 값은 함수를 호출한 곳으로 다시 전달됩니다.

이를 통해 함수 내부에서 변수의 값을 수정하고 그 결과를 함수 외부에서 사용할 수 있습니다.

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

var x = 3
var y = 5
swapValues(&x, &y)
print("x: \(x), y: \(y)") 
// 출력: x: 5, y: 3

  • swapValues함수는 inout 매개변수인 a와 b를 사용해 변수 x와 y의 값을 서로 바꿉니다.
  • 함수를 호출할 때 &를 사용해 변수의 참조를 전달해야 합니다.


👀 Why ?

Swift에서 In-Out 매개변수는 왜 필요한가요 ? !

일반적으로 함수의 파라미터는 함수 내에서 지역 변수로 취급되며, 함수 내에서 변경된 값은 함수 외부에 영향을 미치지 않습니다.

그러나 in-out 파라미터를 사용하면 함수 내에서 해당 변수의 값을 직접 변경할 수 있으며, 변경된 값이 함수를 호출한 곳으로 다시 전달됩니다.

👀 When ?

In-Out파라미터는 언제 유용하게 사용할 수 있을까 ? !

  1. 변수의 값을 함수 내에서 변경해야 하지만, 변경된 값을 함수 외부로 전달해야 하는 경우

함수 내에서 변수의 값을 변경하여 계산 또는 수정하는 경우가 있을 수 있습니다.
그러나 해당 변경된 값을 함수 외부에서도 사용해야 할 때, in-out 파라미터를 사용하여 변수의 값을 변경하고 변경된 값을 함수 호출자에게 반환할 수 있습니다.

  1. 여러 개의 반환 값을 함수 외부로 전달해야 하는 경우

일반적으로 함수는 하나의 값을 반환할 수 있습니다.
그러나 in-out 파라미터를 사용하면 함수 외부로 여러 개의 값을 반환할 수 있습니다.
함수 내에서 여러 개의 변수를 in-out 파라미터로 전달하여 그 값을 변경하고, 함수 호출자는 변경된 값을 가져올 수 있습니다.

  1. 함수 내부의 변수에 대한 참조 전달

in-out 파라미터를 사용하면 함수 내부에서 변수의 참조를 전달할 수 있습니다.
이는 큰 데이터 구조를 복사하지 않고 함수 내부에서 직접 수정할 수 있는 장점을 제공합니다.
이는 성능 향상과 메모리 사용량 감소에 도움이 될 수 있습니다.

💡 주의 사항

  • inout 매개변수는 변수에 대한 참조를 전달하므로, 상수나 리터럴 값을 전달할 수 없습니다. 변수만 전달할 수 있습니다.
  • inout 매개변수는 원래의 변수와 동일한 타입을 가져야 합니다.
  • 함수를 호출할 때 &를 사용하여 변수의 참조를 전달해야 합니다.
  • inout 매개변수는 함수 내에서 변경되어야 하며, 초기값을 가질 수 없습니다.