seong_hye, the developer

Swift) 문법 정리 - inout 키워드 본문

IOS

Swift) 문법 정리 - inout 키워드

seong_hye 2022. 7. 19.

📘 Swift 문법 정리: inout 키워드

Swift 문법 중 inout 키워드에 대해 정리한 글이다.  

 

일반적인 변수들은 값을 복사해서 사용하게 된다.

하지만 복사한 값이 아닌 그 값 자체가 필요하게 된다면 어떻게 해야할까?


copy-in copy-out 메커니즘과도 관련이 깊은데

https://programming-seonghye.tistory.com/42

 

Swift) 문법 정리 - COW(Copy-On-Write)

swif에는 저희가 인지하지 못하고 사용하고 있는 여러 프로그래밍 기술들이 있죠 오늘은 그 중에서 COW(Copy-On-Wirte)에 대해 알아보려고 합니다. COW(Copy-On-Write) 컴퓨터에서 복사할 때 값을 복사해서

programming-seonghye.tistory.com

 

swift에서는 함수의 파라미터에서는 이런 경우를 대비하여

inout 키워드가 준비되어 있다.


🔹 문법 설명

inout 키워드는 함수에서 매개변수를 참조방식으로 전달할 때 사용된다.

즉, 함수 내부에서 파라미터 값을 직접 수정하고,

그 수정된 값이 함수 호출 이후에도 유지되게 만들고 싶을 때 사용한다.

 

기본적으로 Swift의 함수는 **값 타입(복사본)*을 사용한다.

하지만 inout을 사용하면 원본 변수 자체에 접근하게 되는 것이다.


🔹 사용 예시

func swapNumbers(a: inout Int, b: inout Int) {
	var c = a
    a = b
    b = c
}

var num1 = 5
var num2 = 9
swapNumbers(a: &num1, b: &num2) // num1 = 9, num2 = 5

📌 설명

a와 b로 받아오는 값을 Int를 참조하겠다는 의미

함수 내부에서 a와 b로 받은 값을 서로 swap함

수정된 값이 함수 밖에서도 반영됨

 

🔍 왜 &(앰퍼샌드)가 필요할까?

원본을 전달한다는 걸 미리 메모리에 알리는 역할을 해준다.

또한 실수로 값이 바뀌는 것을 방지하려는 목적 또한 가지고 있다.


🔹 여러 타입에서 사용 가능

func swapNumbers<T>(_ a: inout T, _ b: inout T) {
	var c = a
    a = b
    b = c
}

var num1 = 10
var num2 = 2
swapNumbers(&num1, &num2) // num1 = 2, num2 = 10

📌 설명

Swift에서 말하는 T**제네릭(Generic) 타입 파라미터**이다.

즉 어떤 타입이든 받을 수 있게 해주는 타입 유연성의 핵심 기능


🔹 inout의 제약 사항

1. 상수/ 리터럴은 전달 불가

addTen(to: $10) // ❌ 에러

 

2.inout 파라미터는 함수 외부에서 직접 사용 불가

func getNumber(_ a: inout Int) {
	let b = a // ❌ 에러 - inout 값은 복사가 안됨
}

 

3. 클로저 안에서 inout 파라미터 사용 불가

func update(_ value: inout Int) {
	let closure = { value += 1 } // ❌ 에러
}

'IOS' 카테고리의 다른 글

Swift) AutoLayout vs Frame  (0) 2022.07.19
Swift) 문법 정리 - guard문  (0) 2022.07.19
Swift)문법 정리 - 고차함수  (0) 2022.07.12
Swift) 문법 정리 - 클로저 (Closure)  (0) 2022.07.12
Swift) 문법 정리 - 에러 처리(Error Handling)  (0) 2022.07.12
Comments