티스토리 뷰

Swift

inout 파라미터 알아보기

진태우 2018. 6. 8. 16:38
함수가 호출되고 종료될 때, 함수 내부에서 변경된 값은 함수 외부의 값에는 영향을 끼칠 수 없습니다. 

하지만 함수 호출이 종료된 후에도 변경 사항을 유지해야할 경우, inout 파라미터를 사용합니다.


var count = 10
func increment(value: Int) -> Int {
    return value + 1
}

print(increment(value: count))    // 11
print(count)    // 10


위 예제를 보면 함수 내부에서 변경된 값이 외부에는 영향이 없는걸 볼 수 있습니다.
이는 함수로 전달된 값이 내부적인 상수로 복사되어 전달된 값이기 때문입니다. 
함수의 호출 방식중 call by value 라고 생각하시면 됩니다.

inout 파라미터를 사용하면 함수로 전달되는 값을 복사하지 않고 파라미터 자체를 전달하여 함수 내부에서 값을 변경할 경우 함수가 종료된 후에도 값이 변경되어 있습니다.
파라미터 자체를 전달한다는 것은 해당하는 파라미터의 메모리 주소를 전달한다는 의미입니다.
위와는 반대로 call by reference라고 생각하시면 되죠.

inout 파라미터를 사용하는 방법은 간단합니다. 원하는 파라미터 앞에 ampersand(&) 연산자만 붙이면 됩니다.

ios 문서에 나오는 코드를 보면 아래와 같습니다.


func swapTwoInts(inout a: Int, inout b: Int) {
    let temporaryA = a
    a = b
    b = temporaryA
}

var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, b: &anotherInt)
println("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
// Prints "someInt is now 107, and anotherInt is now 3”


함수 내부에서 swap된 변수의 값이 함수가 종료된 후에도 적용되있는 것을 볼 수 있습니다.


In-Out Parameters - ios 문서


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함