서브클래스에서 특정 method, property, subscript 가 오버라이드 되지 않도록 하기위해서 final 키워드를 사용.
- 오버라이드를 할 시 컴파일 에러를 발생시킴.
- 런타임 성능이 향상된다.
어떤 메소드를 호출할지 결정하고, 실행하는 메커니즘
결론 : swift의 클래스는 일반적으로 Dynamic Dispatch를 사용하는데, override가 필요없는 경우는 final을 사용해서 Static Dispatch를 사용하게끔 만들어서 런타임 성능을 향상시킬 수 있다.
어떠한 객체의 일을 대신 해주는 패턴
클래스가 단일 상속만을 지원하기 때문에, 구현 개수에 제한이 없는 프로토콜을 이용한다.
=> 개발의 유연성 증가
한 객체가 해야할 일이 과중화되는 것을 방지할 수 있음
- 멀티코어 시스템에서 동시성 실행을 제공하는 프로그래밍 언어 요소, 런타임 라이브러리 등을 말한다.
- Dispatch queue랑 같다는 글이 많았는데, 자세히 들어가보면 완전히 같지는 않고 gcd의 개념으로 동시성 프로그래밍을 지원하는 api가 Dispatch queue라고 한다.
기존의 스레드 환경을 봤을 때 개발자가 직접 스레드를 생성하고 관리해야하는 환경이었는데, Dispatch queue를 사용함으로써 개발자의 일이 줄어들었다.
참조 타입의 경우 하나의 인스턴스가 여러곳에서 접근하기 때문에, 메모리 해제에 대한 관리를 잘 해주어야하는데, swift에서 이를 위해 사용하는 메모리 관리 기법
클래스의 인스턴스 생성시 이에 대한 정보를 ARC는 따로 메모리 공간을 할당해서 관리하고, 인스턴스가 필요없어지면 자원을 해제한다.
레퍼런스 카운트를 증가시켜 ARC로 인한 메모리 해제를 피하고, 객체를 유지하고자할 때 사용
weak은 객체가 사라지게 되면 nil로 변환하지만, unowned는 댕글링 포인터가 남기 때문에, unowned는 반드시 사라지지 않을거라고 보장되는 객체에서만 사용해야한다.