티스토리 뷰

반응형

 

 

선언된 영역에서 한번 사용되면 반복적으로, 불필요하게 parameter로 전달되거나 복사, 참조, 사용되는 것을 해주는 consume 문법이 swift 5.9부터 생겼습니다.

평소에는 개발자가 COW를 활용하거나 reference count를 증가시키는 등의 동작을 했을때 아무렇지 않게 사용할 수도 있는데요.

어떻게 구현하냐에 따라 많은 성능 차이를 보일 수 있는 코드에서는 이런 과정을 디테일하게 관리해야하는 경우가 있을 수 있습니다. 이때 consume을 활용할 수 있습니다.

consume 되어진 인스턴스는 이후 초기화되기 전까지 값을 접근, 변경하거나, 복사하는 행위, 다른 메서드에 전달되는 것이 불가능하고, 이를 컴파일타임에서 인지할 수 있는 이점이 있습니다. 저와 함께 몇가지 코드 예제와 함께 원리를 이해해 보겠습니다.

 

 


consume 문법을 사용하지 않은 일반적인 인스턴스 활용 예시

일반적으로 볼 수 있는 코드입니다. x라는 배열은 메서드에 전달된 이후에도 다른 변수, 상수에 복사되거나 초기화 없이 값을 변경할 수도 있고, 또 다시 다른 메서드에 반복해서 전달될 수도 있습니다.

consume을 사용하면 해당 인스턴스는 값의 복사, 변경, 전달이 불가능해집니다. consume 사용 예시를 보겠습니다.

 

 


consume 문법을 사용한 인스턴스의 추가적인 값 복사 방지

doStuffUniquely 메서드에 x가 전달되는데, consume 예약어를 명시하고 있습니다! 이렇게 consume 되어진 x를 24번 라인에서 y 상수에 복사하려고 하지만, 컴파일 타임 에러가 발생합니다. 'x' used after consume. 즉, consume 된 이후에는 사용이 불가능하게 되는 것입니다.

불필요한 참조, 복사, 전달을 방지할때 유용할 것 같아요. 더욱이 컴파일 타임에서 이런 문제를 알려주니까요. 또 다른 예시도 좀 더 보겠습니다.

 

 


consume 된 인스턴스는 이후 인스턴스 하위 메서드, 멤버 사용도 불가

consume 되어진 x는 이후에 인스턴스 초기화 없이 값의 변경을 시도하거나,  다른 변수에 할당되거나, 메서드에 전달되는 것이 불가능합니다!

24번 라인) x에 새로운 값을 할당해서 초기화 하거나 하는 것은 가능하지만, removeAll()은 기존 인스턴스를 유지한채 값을 변경하려는 것이기에 불가능합니다.

25번 라인) 다른 상수나 변수에 consume이 된 x를 복사하는 것도 불가능합니다.

27번 라인) consume된 x는 다른 메서드에 전달될 수도 없어요.

 

consume 된 x의 getter 조차 사용이 불가능한 것 볼 수 있어요. 🤔

 

 


consume 된 인스턴스는 이후 초기화 전까지 메서드 parameter 전달이 불가

인스턴스의 초기화가 없이 해당 인스턴스의 메서드를 사용하려한다거나, method의 inout parameter, normal parameter로 전달되는 것도 불가능해요!

그렇다면, consume이 된 인스턴스를 또 다시 다른 메서드에 전달하거나, 복사하고 싶다면 어떻게 해야할까요? 🤔

 

 


consume 된 인스턴스... 다시 복사, 참조, 전달하고 싶다면? 🤔

간단하게 25~26번 라인처럼 인스턴스를 깔끔하게 초기화 시켜주면, 일반적인 방식으로 다시 사용이 가능합니다. 물론 28~29번 라인에서 또 다시 consume을 한다면, consume한 인스턴스는 초기화 전까지는 인스턴스 메서드 사용, 복사, 전달이 불가능해집니다!

 


오늘은 swift 5.9 버전 부터 사용가능한 consume의 예제 코드와 함께 사용 예시나 원리를 가볍게 알아보았습니다. 

기본적인 사용 예시는 알았지만, 실무에서 보다 적극적이고 효율적으로 활용하려면 깊이있는 공부가 필요할 것 같아요~ consume, consuming 관련해서 의견이나 피드백 있다면 댓글 언제든지 환영합니다! 감사합니다~ ☺️

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함