일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Switch
- list
- 글또
- IOS
- NotificationCenter
- Refresh
- Observer
- 회고
- uikit
- segue
- error
- http
- apns
- SWIFT
- calendar
- protocol
- struct
- SWIFTUI
- class
- self
- viewlifecycle
- ScrollView
- Git
- escaping
- array
- PushNotification
- mvvm
- singleton
- 고차함수
- 화면전환
- Today
- Total
seong_hye, the developer
Swift) 문법 정리 - inout 키워드 본문
📘 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 |