새소식

iOS/질문으로 접근하는 CS문제

Swift에서 class의 성능을 향상시키는 방법을 서술하시오.

  • -

1. final과 private를 사용하자.

swift에는 Static Dispatch와 Dynamic Dispatch가 있다.

Dispatch란 어떤 프로퍼티나 함수를 호출할지를 결정하는 과정인데 Static과 Dynamic을 통하여 언제 실행을 할지를 결정한다.

  Static Dispatch Dynamic Dispatch
속도 빠름 느림
실행되는 위치 컴파일 타임 런 타임
사용하는 구조체(?)들 struct class

쉽게 설명하자면 Class는 Dynamic Dispatch를 사용하고 그렇기에 성능이 Struct보다 저하된다고 생각하면 쉽다.

그렇다면 반대로 Static Dispatch를 사용해서 Class를 실행하면  속도가 빨라질텐데 어떻게 Static Dispatch를 사용할 수 있을까?

답은 상속을 허용하지 않는 Class 유형들이다.

 

첫번째 예시로 final이 있다.

Dynamic Dispatch를 Class가 사용하는 이유는 Class를 상속받으면서 동적으로 사용하기 위해서인데 final을 사용하는 Class는 상속을 허락하지 않는다는 옵션이기 때문에 자동적으로 Static Dispatch를 사용하게 된다.

 

두번째 방법은 private이나 fileprivate이다.

private나 fileprivate를 사용하면 외부에서 해당 클래스에 접근을 하지 못하게 되고 파일 내부에서 해당 클래스를 상속한 값이 없다면 자동적으로 Static Dispatch로 실행하게 된다.

2. 배열과 연결리스트 사이에서 고민을 해보자.

배열의 경우에는 조회를 할때는 O(1)이지만 삽입이나 삭제의 경우에 O(n) 이 걸리는 특성이 있다.

연결리스트의 경우에는 반대로 조회를 할때는 O(n)이 걸리지만 삽입이나 삭제에서 O(1)이 걸리는 특성이 있다.

클래스 내부에 만일 배열을 사용한다면 이와 같은 고민을 통해서 배열과 연결리스트 사이에서 고민을 하고 결정을 하자.

 

3. 모듈화를 가끔 양보하자.

가끔씩은 코드 내부에 있는 함수등을 따로 빼지 말고 안에다가 넣어서 실행해보자. 코드 외부로 빼는 것보다 속도 자체는 더 빠르다.

다만, 이와 같은 방법은 클린 코드와 성능을 교환한것이기에 개인적으로 추천을 하지 않는다.

 

 

 

출처 : https://www.linkedin.com/pulse/9-ways-boost-your-swift-code-performance-avi-tsadok/

 

9 Ways to Boost Your Swift Code Performance

Important note Swift is a fast language and it gets faster in every release. iOS devices are also fast, so most chances those tips won’t be needed at all.

www.linkedin.com

https://velog.io/@wnsxor1993/Class%EC%9D%98-%EC%84%B1%EB%8A%A5-%ED%96%A5%EC%83%81-%EB%B0%A9%EB%B2%95

 

Class의 성능 향상 방법

이는 Swift의 Dispatch 매커니즘과 관련이 있다. 보통 Dispatch라고 하면 Thread와 관련 있는 DispatchQueue를 떠올리게 되는데 이와는 다소 다른, 어떤 메서드를 호출할 것인지 결정하고 실행하는 매커니즘

velog.io

https://velog.io/@dvhuni/Reducing-Dynamic-Dispatch

 

Reducing Dynamic Dispatch

안녕하세요 !! 지난번 포스팅에 이어 Reducing Dynamic Dispatch에 대한 글을 쓰려고 합니다!!

velog.io

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.