관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] consume, consuming 개념 (메모리 효율성, CoW) 본문

iOS 응용 (swift)

[iOS - swift] consume, consuming 개념 (메모리 효율성, CoW)

jake-kim 2024. 5. 10. 01:06

consume 개념

  • swift5.9+
  • "consume" 의미 그대로 lifetime을 중지한다는 의미
    • a라는 프로퍼티를 consume 시키면사용하지 못함 (컴파일 에러 발생)
var a = [1,2,3]
var b = consume a

print(a) // 'a' used after consume
  • 프로퍼티를 copy하거나 write할때 최적화하기 위해 consume이 탄생
    • 일반적으로 CoW라고 명칭
    • 데이터를 복사하는 대신에 필요한 시점에서만 복사를 하기 때문에 메모리를 효율적으로 사용
    • 주로 대용량 데이터나 공유 자원을 다룰 때 유용

https://www.lenovo.com/us/en/glossary/what-is-cow/?orgRef=https%253A%252F%252Fwww.google.com%252F

ex) CoW 개념

  • var b = a를 시도할때, b는 a의 데이터를 참조하고 있다가, 만약 b의 수정사항이 될땐 (b = 1), b가 자체 복사본을 만들어서 1의 값으로 변경하는 것
  • 메모리를 효율적으로 사용이 가능
var a = 0
var b = a
b = 1

consuming 키워드

  • consume 키워드와 consuming이라는 키워드가 존재
    • consuming키워드는 함수 파라미터에서 값을 받을 때 사용
    • 아래처럼 doSomethin에서 value값에 새로 값을 할당해도 컴파일 에러가 발생하지 않는데, CoW의 개념처럼 동작하는 것
    • 파라미터에 값이 넘어갈때 value = a 이렇게 동작할 때 value는 a의 값을 참조하다가 value값에 새로운 값이 어싸인이 되면(value = [1]) 그때 copy하고 새로 값을 할당하는 것
var a = [1,2,3]
doSomething(with: a)

func doSomething(with value: consuming [Int]) {
    value = [1]
}

 

* 참고

- https://www.lenovo.com/us/en/glossary/what-is-cow/?orgRef=https%253A%252F%252Fwww.google.com%252F

- https://github.com/apple/swift-evolution/blob/main/proposals/0366-move-function.md

Comments