iOS/Swift

[Swift] Function 의 In-Out parameter

건우(gunoo) 2023. 6. 4. 18:48

1. Swift 의 function parameter는 기본적으로 상수(Constant)이다.

 

func addNumber(a: Int, b:Int) -> Int {
	//parameter a 와 b 는 Constant 이다.
	return a + b
}

 

인자로 들어온 a의 값을 변경하려고 하면 아래와 같은 에러메시지가 나타난다.

 

func addNumber(a: Int, b:Int) -> Int {
	a = a + 10 // 에러발생: Cannot assign to value: 'a' is a 'let' constant
	return a + b
}

 

2. 함수의 인자값을 변경하기 위한  키워드:  inout

위의 함수에서 a 라는 인자로 들어온 값을 b로 변환해야 한다고 할 때, a 를 In-Out parameter 로 지정해주면 된다.

 

func addNumber(a: inout Int, b:Int) -> Int {
	a = b
	return a + b
}

 

In-Out parameter로 지정하면, a의 값으로 상수는 올 수 없다.

변수로 할당 후 &(ampersand 앰퍼샌드)를 붙여 사용해야 한다.

 

var a = 5
let result = addNumber(a: &a, b: 1)

print(result) // 출력: 2

3. 작동원리

inout 은 함수의 매개변수(parameter)에 대한 참조(reference)를 전달하는 방식으로 작동한다.

parameter의 주소값을 전달해주고, 주소를 참조하여 값을 변경하기 때문에 원본이 변경된다.

 

var a = 30

func addNumber(a: inout Int) {
    a -= 10
}

addNumber(a: &a)
print(a) //출력: 20

 

 

위와 같이 상태값이 아닌 주소값을 이용하여 값을 변경하고 최적화 하는 방식을 call by reference 라고 부른다.