Open Do-hyun-Kim opened 10 months ago
extension
은 타입에 새로운 기능을 추가할 수 있지만, 기존에 존재하는 기능을 override 할 수 없다고 명시되어 있음
import UIKit
extension UINavigationController { open override var shouldAutorate: Bool { return true } open override func viewDidLoad() { super.viewDidLoad() } }
- 컴파일러가 Objective-C 와 호환성을 위하여 override를 허용하기 때문임 -> 메소드가 objc와 호환되는 경우에만 extension 내부에서 메서드를 override 할 수 있음
- 하지만 override는 수직적 확장, extension은 수평적 확장. 같은 타입 기능을 확장하는 곳에서 수직적으로 기능을 확장하는 것은 논리적인 오류가 있기 때문에 사용을 지양하자고 하는 것 같음
#### 참조
- [Extension 에서 Override 하기](https://feather.tistory.com/2)
- [[Swift🦩] #21 확장 Extension ⭐️⭐️](https://velog.io/@ddosang/Swift-21-%ED%99%95%EC%9E%A5-Extension)
Extensions can add new functionality to a type, but they can’t override existing functionality -> Swift doc
- extension은 수평 확장, override는 수직 확장에 해당한다.
viewDidLoad()
메서드 등 or @objc
키워드가 붙은 메서드)는 컴파일러가 swift와 objc 와의 호환성을 위해 override를 허용한다.extension은 말 그대로 '기능의 수평적 확장'인데 override를 한다는 것은 '확장'이 아닌 '덮어쒸움'에 가깝기 때문에 '수직적인 확장'이라 할 수 있으며, 이는 '수평적인 확장'에 반한다.
Extension 내부에서 함수를 override할 수 있는지 설명하시오.
extension
은 내부에서 새로운 기능을 추가 할 수 있지만, 기존 기능을override
(재정의) 할 수는 없다. 라고 정의 되어 있습니다.extension
은 수평적으로 확장을 이루어 나가지만,override
는 수직적으로 확장을 이루어 나가며 다형성을 제공하기 때문에 개념상 어울리지 않습니다.override
는Object Oriented Programming
에서 제공해주는 다형성이며,extension
은Protocol Oriented Programming
에서 제공되는 다형성이기에 extensions에서override
는 어울리지 않는 구현 방법입니다.📝 참고 사이트