티스토리 뷰

iOS

[Swift] inout parameter

Peppo 2021. 10. 26. 14:57
728x90

Generic을 공부하면서 아래와 같은 코드를 봤다.

func swap(_ a: inout Int, _ b: inout Int) {
	// code
}

Inout ? 그것도 파라미터 자리에? 뭐지..

 

오늘은 Inout 파라미터에 대해 알아보자!!

 

Inout parameter

입출력 파라미터 라고도 불리며,

 

함수에서 직접 파라미터 값에 접근할 수 있도록 해주는 기능이다.

 

선언 방법

func 함수명(name: Inout Type)

이런식으로 적어준다.

func 함수명(_ 파라미터이름: inout 타입, _ b: inout Int) { }

그리고

인자값을 파라미터로 보내기 위해서는

인자값 앞에 

'&'

를 붙여준다.

 

함수명(&변수, &변수)

 

일반 함수와 차이.

 

아래의 예시를 봅시다.

 

일반적인 함수

func swapTwoInts(_ a: Int, _ b:  Int) {
    let temporaryA = a
    a = b  // error >> Cannot assign to value: 'a' is a 'let constant
    b = temporaryA  // error >> Cannot assign to value: 'b' is a 'let constant
}

일반적으로 swift 함수는 모든 인자가 함수를 호출할 때 상수로 호출 되기 때문에 넘어온 값을 바꿀수 없다.

 

값을 변경(참조해서 전달) 하고 싶다면 !?

 

Inout 파라미터를 보자

 

Inout Parameter

func swapTwoInts(_ a: inout Int, _ b: inout Int) {
    let temporaryA = a  // temporaryA = 3
    a = b   // a = 5
    b = temporaryA  // b = 3
}

var a = 3
var b = 5

swapTwoInts(&a, &b)

 

대충 짐작이 오시나요??

 

Inout parameter는 참조로 전달 할때 사용하기 때문에 

값을 변경 할수 있습니다.

 

 

 

728x90