티스토리 뷰
[Swift 5.9] Consume operator to en the lifetime of a variable binding
doyeonjeong_ 2024. 3. 6. 17:54원문: https://www.hackingwithswift.com/swift/5.9/consume-operator
Swift에서 Consume 연산자를 이해하고 사용하기
Swift의 새로운 기능인 consume
연산자는 값의 Lifetime을 명시적으로 끝내는데 사용되며, 이를 통해 개발자가 데이터가 전달될 때 발생하는 불필요한 retain/release 호출을 줄일 수 있다.
기본 사용법
struct User {
var name: String
}
func createUser() {
let newUser = User(name: "Anonymous")
let userCopy = consume newUser // [✨]
print(userCopy.name)
}
createUser()
`// [✨]` 이 주석을 참고하자.
이것은 두 가지 작업을 동시에 수행한다.
newUser
에서userCopy
로 값을 복사하고,newUser
의 Lifetime을 종료시킨다. (이후에newUser
에 접근하려고 시도하면 오류 발생)
이렇게 하면 컴파일러에게 명시적으로 "이 값을 다시 사용하지 못하게 해 주세요"라고 지시할 수 있다.
데이터 소비하기
아래와 같이 데이터의 복사본이 필요 없고 단순히 파괴되었다고 표시하고 싶을 때도 특히 자주 사용될 수 있다.
func consumeUser() {
let newUser = User(name: "Anonymous")
_ = consume newUser
}
함수로 값 전달하기
아마도 값이 함수에 전달될 때 실제로 이 consume
연산자가 가장 많이 사용되지 않을까?
예시가 있다면 아래와 같다.
func createAndProcessUser() {
let newUser = User(name: "Anonymous")
process(user: consume newUser)
}
func process(user: User) {
print("Processing \(user.name)…")
}
createAndProcessUser()
추가 정보!
1. Swift는 코드의 어느 분기에서 값이 소비되었는지 추적하고, 조건부로 규칙을 적용한다.
예를 들어, 아래 코드에서는 두 가능성 중 하나만 User 인스턴스를 소비한다.
func greetRandomly() {
let user = User(name: "Taylor Swift")
if Bool.random() {
let userCopy = consume user
print("Hello, \(userCopy.name)")
} else {
print("Greetings, \(user.name)")
}
}
greetRandomly()
2. 엄밀히 말해 consume
는 값이 아니라 바인딩에 작용한다.
이는 실제로 변수를 사용하여 소비하면, 변수를 재초기화하고 그것을 다시 사용할 수 있다는 것을 의미한다.
func createThenRecreate() {
var user = User(name: "Roy Kent")
_ = consume user
user = User(name: "Jamie Tartt")
print(user.name)
}
createThenRecreate()
이러한 방식으로, consume
연산자는 Swift 개발에서 데이터 관리를 더욱 효율적으로 할 수 있도록 도와준다. 이 기능을 활용하여 더욱 효율적인 코드를 작성해 보시길 바란다는데 어떻게 쓰이면 좋을지 고민해보는게 좋겠다.
개인적으로는 저장되면 안되는 문자열이나 코드같은 걸 처리할 때 기록에 남지 않게 하기 좋을 것 같다.
'Apple > Swift' 카테고리의 다른 글
[Swift 5.9] Convenience Async[Throwing]Stream.makeStream methods (1) | 2024.03.07 |
---|---|
[Swift 5.9] Noncopyable structs and enums (0) | 2024.01.11 |
[Swift 5.9] Macro (0) | 2024.01.11 |
[Swift 5.9] Value and Type Parameter Packs (0) | 2024.01.09 |
[Swift 5.9] if and switch expressions (1) | 2024.01.08 |
- Total
- Today
- Yesterday
- llama
- sliver
- 핵심내용
- it seminar
- slivers
- 낙관적 업데이트 패턴
- CellStyle
- 싱글톤
- 의존성
- jsonkey
- UITableViewCell
- fromjson()
- 오블완챌린지
- tojson()
- listview
- 플러터
- AsyncSwift Korea Seminar
- Swift Conference
- jsonserializable
- llm 설치
- SWIFT
- flutter
- ios
- LLM
- 이코테
- 티스토리챌린지
- 꼼꼼한 재은 씨의 스위프트 문법편
- swift5.9
- 오블완
- sliverlist
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |