Apple-CS-interview / iOS-CS-interview

7 stars 0 forks source link

Extension 내부에서 함수를 override할 수 있는지 설명하시오. #23

Open Do-hyun-Kim opened 10 months ago

Do-hyun-Kim commented 10 months ago

Extension 내부에서 함수를 override할 수 있는지 설명하시오.

📝 참고 사이트

Hminchae commented 10 months ago

Extension 내부에서 함수를 override가 가능할까

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)
vichye-1 commented 10 months ago

Extension 내부에서 함수를 override 할 수 없다.

Extensions can add new functionality to a type, but they can’t override existing functionality -> Swift doc

  • extension은 수평 확장, override는 수직 확장에 해당한다.

Extension 내부에서 함수를 override 할 수 있는 경우(지양)

출처

ronick-grammer commented 10 months ago

Extension 내부에서 함수를 override할 수 있는지 설명하시오

extension 내부에서 override를 지양하는 것이 권장된다.

extension은 말 그대로 '기능의 수평적 확장'인데 override를 한다는 것은 '확장'이 아닌 '덮어쒸움'에 가깝기 때문에 '수직적인 확장'이라 할 수 있으며, 이는 '수평적인 확장'에 반한다.

📝 참고 사이트