Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SWIFT
- collectionview
- Xcode
- UITextView
- Clean Code
- HIG
- 애니메이션
- Human interface guide
- Observable
- 리펙토링
- MVVM
- clean architecture
- UICollectionView
- tableView
- rxswift
- uiscrollview
- map
- swiftUI
- ios
- swift documentation
- uitableview
- Protocol
- 클린 코드
- 리팩토링
- ribs
- 스위프트
- combine
- Refactoring
- 리펙터링
- RxCocoa
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 소유권 개념 이해하기 (consume, mutate, borrow) 본문
value를 사용할때의 ownership
- value를 사용하면 어떻게든 소유권 시스템을 갖음
var array = [1,2,3] // array는 [1,2,3]에 관한 소유권을 갖음
- 소유권 시스템
- 값을 소비(consume)하거나 변경하거나(mutate) 빌리는(borrow) 것
Consuming values 개념
- representation의 소유권을 한고셍서 다른 곳으로 이전한다는 의미
- value를 넘길때 consuming 파라미터를 사용하여 구현
ex) 아래 코드에서 발생하는 consuming 이해하기
- array에 값을 assign할 때, 초기 값의 소유권을 array 변수로 이전함
- array입장에서 초기값의 소유권을 갖게되므로 "consuming" 함
func makeArray() {
var array = [1.0, 2.0]
}
- 이렇게 초기값을 넘길수도 있지만, 아래처럼 값의 소유권을 새 변수로 다시 이전도 가능
- 새로운 값을 생성하지 않고 기존 변수를 참조하는 것
- 이전 변수의 현재 값을 복사해야하는 상황
- 복사한다는 의미는, 값은 배열이므로 해당 버퍼를 유지한다는 의미
func makeArray() {
var array = [1.0, 2.0]
var array2 = array
}
- 만약 컴파일러가 이전 변수 array는 사용하지 않는다는 것을 알게된다면, 복사본 없이 여기에 값을 전송할 수 있어야한다는 의미
- 이럴땐 consume 연산자를 사용하여 명시적으로 컴파일러에게 "이전 변수는 사용하지 않는다"라는 것을 알려주는 것
Mutating values 개념
- 값을 변경한다는 의미 -> 변수에 저장된 현재 값의 소유권을 일시적으로 가져오는 것
- 이후에도 여전히 값의 소유권을 가질 것으로 예상한다는 것
- inout parameter 사용
ex) array의 append 메서드를 호출하면 현재 변수에 있는 값의 소유권이 append 메서드로 이전됨
- 호출 중에 변수를 다른 방식으로 동시에 사용하는 것을 방지
- append 메서드가 끝나면 다시 소유권을 array 변수로 넘겨줌
- 변수가 해당 값의 소유권을 갖는다는 불변성을 유지
Borrowing values 개념
- 값을 빌리는 것은 다른 누구도 그 값을 사용하거나 변경할 수 없다는 것을 의미
- (getter만 가능하고 setter는 불가능)
- value나 class reference를 호출할때 해당
- borrowing 파라미터를 넘겨서 사용
ex) print와 같이 단순히 값을 읽어서 출력만하고 싶은 경우 (== 값을 변경하거나 소비하지 않는 경우) borrowing을 사용
* 위 3가지 개념을 토대로 심화 개념 Mechanics of copying 내용은 Explore Swift performance 포스팅 글 참고
* 참고
'iOS 응용 (swift)' 카테고리의 다른 글
Comments