반응형
1. heap보다는 stack에 메모리를 할당
- class보단 struct나 enum을 사용한다. class는 heap할당, struct나 enum은 stack할당이므로
메모리 할당
class: heap
struct: stack
enum: stack
- heap ⇒ 메모리 할당을 사용하지 않은 영역을 찾아 할당하는 방식(동적할당)이므로 좀 복잡함 (속도가 느림)
stack ⇒ LIFO 방식이므로 메모리 구조가 단순함 (속도가 빠름, O(1))
2. 정적 디스패치(static Dispatch)를 지향
- 일반적으로 swift에서는 dynamic dispatch를 사용하도록 되어있음
- 클래스(메서드, 프로퍼티)를 선언할 때 상속되지 않는 클래스에 final을 붙이면 성능이 향상됨
- 클래스는 dynamic dispatch을 사용 ⇒ 오버라이딩의 가능성이 있기 때문
- final을 붙이면 서브클래스를 만들지 않는다는 것을 명시적으로 표현 가능
- final으로 선언된 요소들은 직접 호출(더 빠름), 그렇지 않은 요소들은 vtable을 통해 간접호출(더 느림)
Static Dipatch(정적 디스패치)
- 컴파일 타임에 어떤 메서드를 사용할 지 정해짐 (미리 정해둠)
- 속도가 빠름
Dynamic Dispatch(동적 디스패치)
- 런타임에 어떤 메서드를 사용할 지 정해짐
- 속도가 느림
- 속도가 느리다는 단점이 있지만 다형성 때문에 사용함
3. 파일 내에서만 접근해도 되면 private으로 선언
- private로 선언시 참조 가능한 범위가 현재의 파일로 제한 → 컴파일러는 프로퍼티의 오버라이딩 여부 판단
- 오버라이딩이 안된다면 컴파일러가 final로 추론 → 정적 디스패치로 동작
반응형
'iOS > Interview Questions' 카테고리의 다른 글
[iOS] struct, class, enum (0) | 2023.02.14 |
---|---|
[iOS] 앱이 foreground에 있을 때와 background에 있을 때 어떤 제약사항이 있는가? (0) | 2022.10.20 |
[iOS] @Main에 대해 (0) | 2022.10.20 |
[iOS] 앱이 시작할 때 main.c 에 있는 UIApplicationMain 함수에 의해서 생성되는 객체 (0) | 2022.10.13 |
[iOS] App thinning(앱 시닝) 이란? (0) | 2022.10.13 |