흔히들 class에서 상속 구조가 없으면 swift optimizationTips에서 가이드하는 것처럼 아래와 같이 final 키워드를 명시하여 컴파일러가 최적화를 수행할 수 있도록 해준다.
class 뿐만 아니라 메서드, 프로퍼티는 final 키워드를 통해 컴파일러가 최적화가 가능하다.
final 키워드는 더 이상 얘는 overriden 되지않아.! 걍 바로 얘 쓰면 돼! 라고 알려주는 것과 같기 때문이다.
그렇다면 swift 5.5에 새롭게 등장한 actor는 어떨까?
그보다 먼저 actor가 뭔지부터 간략하게 끄적여보면
actor는 class와 같은 reference type이다. class와 다른 점은 상속이 불가능하고, MT-safe를 기본적으로 보장한다.
다른 타입처럼 initializer도 가질 수 있고, 메서드, 프로퍼티, subscript도 가질 수 있다.
아래와 같이 하나의 type으로서 정의해서 사용할 수 있다.
CachedImageManager는 사진첩에서 이미지를 불러오고 이를 캐싱하는 책임을 가지는 객체이다.
이미지 캐싱, 비동기 이미지 요청과 캐싱 관리 간에 발생할 수 있는 data race를 방지하기 위해서 actor로 정의했다.
코드 리뷰를 해주신 선배 개발자분께서 이 부분에 대해서 코멘트를 주셨다.
내가 최적화를 염두에 두고 습관적으로 final을 actor 앞에 명시했지만, 과연 actor에 final을 붙이는 게 최적화에 과연 도움이 될까?
앞서 actor는 상속이 불가능한 타입이라고 했다.
그리고 final은 더이상 overriden 하지 않을 것이라는 걸 명시하기 위해 쓴다고도 했다.
각 키워드가 의미하는 바를 코드상에서 한글로 바꿔보자
사실 actor는 본질적으로 상속이 불가능한 타입이므로, 이미 final의 특성을 내포하고 있다.
따라서 actor앞에 final을 붙이는 건 같은 의미를 중복해서 명시하는 것.!
굳이 같은 말을 두번쓸 필요가 없다.
이제 final을 굳이 쓸 필요가 없다는 것을 알았으니... ✨ 코드를 개선하자.
결론: actor와 final actor는 같으니 깔끔하게 actor로 쓰자.
정리하면서 마지막으로...
이러한 불필요한 코드, 습관성 코드들이 바로 레거시가 되는 것이다.
협업 환경에서 불필요한 리소스를 줄이려면, 어떤 코드를 쓰더라도 꼼꼼히 잘 따져서 작성해야한다.
반성하고, 코드 한줄한줄 더 신경써서 개발하는 주니어가 되자🥹
'iOS와 그 외 > Swift' 카테고리의 다른 글
[Swift] 데이터모델링 Struct와 Class중 어떤 걸 써야할까요 +_+ ? (0) | 2024.08.04 |
---|---|
[Swift] class func vs static func (0) | 2024.07.31 |
[Swift] inout 매개변수 (0) | 2024.07.19 |
[Swift] Method Dispatch 란 (0) | 2024.07.15 |
[Swift] LazySequence (0) | 2024.07.08 |