swift의 inout 키워드
swift에서 함수의 파라미터는 기본적으로 값을 복사하여 집어넣는 call by value이다.
즉, 함수의 인자로 어떤 값을 넣을 때, 그 값은 불변성을 지닌다. (함수 내부에서 인자로 들어온 값에 어떤 값을 새로 할당하거나 변경할 수 없다는 말!)
실제로 변경을 하거나 새로 할당하려고 하면, 인자가 let 키워드로 된 변수이기 때문에 수정이 불가하다 라는 에러를 볼 수 있다.
함수 내부에서 인자로 받은 값을 변형하겠다는 신호로 inout 키워드를 붙여줄 수 있다.
함수 정의부에서 특정 파라미터의 타입 선언 전에 inout을 붙이면, 그 인자는 변경이 가능한 인자가 된다.
함수를 호출하는 부분에서는 &키워드로 인자가 inout한 타입이라는 것을 명시해준다.
func someFunc(_ num: inout Int) {
// num은 내부에서 값의 할당, 변경이 가능
}
var a = 0
someFunc(&a)
inout으로 들어가는 인자는
우선 함수 파라미터로 들어가는 것이기 때문에 값에 대한 복사가 진행된다.
함수 내부에서 복사된 값을 업데이트 하거나 새롭게 할당하는 과정이 진행된다.
함수가 종료되면 내부에서 수정/재할당 된 값을 외부의 참조하는 값에 다시 할당한다. (마치 여기서 값의 참조가 일어난 것처럼 보인다. call by reference)
in 할 때 copy가 발생하고, out 할 때 새로운 값의 copy가 발생해서 in-copy out-copy를 줄여 inout이 된다.
Reaction
Comment
Share