Notice
Recent Posts
Recent Comments
Link
大器晩成
inout 파라미터 본문
inout 키워드는 함수 내에서 변수를 직접 수정하도록 하고 싶을 때 사용합니다.
- 함수 내의 파라미터는 기본적으로 값타입이고(복사되어서 전달) 임시상수이기 때문에 변경 불가 원칙입니다.
var num1 = 123 // 전역변수
var num2 = 456 // 전역변수
func swap(a: Int, b: Int) {
var c = a
// a = b
// b = c
}
swap(a: num1, b: num2)
swap 함수 내에 있는 a와 b는 상수이기 때문에 값을 바꿀 수 없습니다.
함수 내에서 변수를 직접 수정하도록 돕는 것이 inout키워드(참조로 전달)
- C언어의 &와 동일, 메모리 주소를 전달
- inout 키워드(선언 시), &사용(실행 시)
num1 = 100
num2 = 200
func swapNumbers(a: inout Int, b: inout Int) {
var temp = a
a = b // a == num1 변수와 같다
b = temp // b == num2 변수와 같다
}
// 함수 실행시에는 앰퍼샌드를 꼭 붙여야함
swapNumbers(a: &num1, b: &num2)
print(num1) // 출력: 200
print(num2) // 출럭: 100
inout파라미터 사용 시 주의점
- 상수(let)나, 리터럴 전달하는 것 불가능합니다. (오직 변수만 인자값으로 사용할 수 있습니다.)
- 파라미터의 기본값 선언을 허용하지 않습니다.
- 가변파라미터(여러 개의 파라미터)로 선언하는 것 불가능합니다.
*참고사항
- 입출력 파라미터는 내부적으로 copy-in, copy-out 비슷하지만, 조금 차이가 있습니다.
- copy-in이란 함수가 호출될 때, 전달된 인자가 함수 내부로 복사됩니다. 즉, 함수 내부에서 사용되는 값은 원본 값의 복사본입니다. (함수 내부에서 이 값을 변경할 경우 원본 값에는 영향을 미치지 않습니다)
- copy-out - 함수가 종료될 때, 함수 내부에서 변경된 값이 다시 외부로 복사되어 전달됩니다. 즉, 함수가 종료되면 함수 내부에서 변경된 값이 원본에 반영됩니다.
- inout은 복사가 아닌 참조 전달 방식입니다.
728x90
'iOS > Swift 문법' 카테고리의 다른 글
구조체(Struct)와 클래스(Class) (1) | 2024.11.21 |
---|---|
옵셔널 체이닝 (4) | 2024.11.12 |
Swift 제어전송문 (0) | 2024.11.08 |
함수의 오버로딩 (1) | 2024.11.08 |
함수의 표기법(시그니처 표기법) (0) | 2024.11.08 |