class의 성능을 향상 시킬수 있는 방법들을 나열해보시오.

bromp 1월 2일 PM 03:50 84 0
bromp Profile Image Level 7

  • Dispatch를 이용한 최적화
    • Static Dispatch
      호출될 함수를 컴파일 타임에 결정하고 런타임 떄 실행하는 매커니즘으로 성능이 좋다.
    • Dynamic Dispatch
      호출될 함수를 런타임에 결정한다. Swift에서는 클래스마다 함수 포인터들의 배열인 vTable(Virtual Dispatch Table)을 유지한다.
      하위 클래스가 메서드를 호출할 때, vTable를 참조해 실제 호출할 함수를 결졍한다. 이 과정들이 런타임에 일어나 성능상 손해를 본다.
      참고

    따라서 class의 성능을 향상 시키기 위해 Dynamic Dispatch 대신 Static Dispatch를 사용하게 끔 만들어 주면된다.

    1. 상속이나 오버라이딩이 필요없는 클래스나 메서드, 프로퍼티에 final 선언
    2. 파일 내에서만 접근해도 될 경우 private 선언
      private로 선언할 경우 참조 가능한 범위가 현재 파일로 제한되며 컴파일러는 참조될 수 있는 구역내에서 오버라이징 될지 안될지를 판단하고 오버라이딩 되는 곳이 없다면 final로 추론해서 static dispatch로 동작시키게 된다.
    3. 가능하다면 class보다 struct나 enum을 사용해서 heap보다는 stack메모리를 사용하려고 한다.
댓글