iOS/Swift

[Swift] inout 파라미터

최지철 2024. 5. 28. 13:31
728x90
반응형

inout 파라미터는 무엇이고, 언제 사용할까?

  • 일반적인 Swift함수의 파라미터는 상수이다. 고로, 변경될 수 가 없다.
  • 그러나, inout파라미터를 사용하면 함수내에 직접 변수를 변경하겠다는 의미로 사용된다. 
  • inout 파라미터는 Swift에서 함수가 호출될 때 해당 파라미터를 수정할 수 있도록 허용하는 기능이다.
  • inout 키워드를 사용하면 함수 내부에서 파라미터를 수정할 수 있으며, 수정된 값이 함수 호출 이후에도 유지된다.
func addOne(inout num: Int) {
    num += 1
}

var myNum = 5
addOne(num: &myNum)
print(myNum)    // 출력: 6

inout 원리

  • 함수가 호출되면 매개변수로 넘겨진 변수가 복사된다.
  • 함수 몸체에서 복사한 값을 수정한다.
  • 함수가 반환될 때 변화된 값을 원본 변수에 재할당한다.

그러므로 이를 copy-in copy-out 이나 call by value result라고 부른다.

그래서 inout이 위의 말을 줄임말이라고 한다.

Swift는 값을 복사하는 것이 아니라 저장된 메모리 주소값을 함수 내부, 외부에서 사용한다.

이는 call by reference라고 한다.

이렇게 주소값만을 복사하므로 오버헤드를 줄일 수 있다고 한다.

 

inout  주의사항

  • 상수 전달 불가 
    • inout 파라미터는 상수나 리터럴 값을 직접 전달할 수 없으며, 변수만 전달할 수 있다.
var value = 10
updateValue(&value) // 정상 작동
updateValue(&10)    // 오류 발생: 상수 리터럴은 전달할 수 없음
  • 참조로 전달
    • inout 파라미터는 함수 내에서 원래 변수의 참조로 전달되므로, 함수가 반환된 후에도 원래 변수에 대한 변경 사항이 유지된다.

정리

inout 파라미터는 함수가 외부 변수의 값을 직접 수정할 수 있도록 해준다. 이를 통해 값의 변경이 함수 호출 후에도 반영되도록 할 수 있으며, Swift에서 함수 내부에서 파라미터를 수정하고자 할 때 유용하게 사용할 수 있다.

 

728x90
반응형