Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Do-hyun-Kim opened this issue Oct 22, 2023 · 4 comments
Labels
Swift Swift CS 개념 공부

Comments

@Do-hyun-Kim
Copy link
Contributor

No description provided.

@Do-hyun-Kim Do-hyun-Kim added the Swift Swift CS 개념 공부 label Oct 22, 2023
@Do-hyun-Kim
Copy link
Contributor Author

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

  • extension 은 내부에서 새로운 기능을 추가 할 수 있지만, 기존 기능을 override (재정의) 할 수는 없다. 라고 정의 되어 있습니다.
    • Extensions can add new functionality to a type, but they can’t override existing functionality.
  • extension은 수평적으로 확장을 이루어 나가지만, override는 수직적으로 확장을 이루어 나가며 다형성을 제공하기 때문에 개념상 어울리지 않습니다.
  • 앞서 설명했듯이 overrideObject Oriented Programming 에서 제공해주는 다형성이며, extensionProtocol Oriented Programming에서 제공되는 다형성이기에 extensions에서 override는 어울리지 않는 구현 방법입니다.

📝 참고 사이트

@Hminchae
Copy link
Member

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

  • 애플 가이드에서 extension은 타입에 새로운 기능을 추가할 수 있지만, 기존에 존재하는 기능을 override 할 수 없다고 명시되어 있음
  • 하지만 다음의 코드처럼 메소드를 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은 수평적 확장. 같은 타입 기능을 확장하는 곳에서 수직적으로 기능을 확장하는 것은 논리적인 오류가 있기 때문에 사용을 지양하자고 하는 것 같음

참조

@vichye-1
Copy link

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

  • 기본적으로 extension 내부에서 함수를 override 할 수 없다.

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

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

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

  • 메소드가 Objective-C와 호환되는 경우에만 Objective-C와의 호환성을 위해 extension에서 override를 허용한다.
    • 하지만 지양하는 것이 좋다

출처

@ronick-grammer
Copy link
Contributor

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

  • 원칙적으로는 swift 는 Extension에서 override할 수 없다.
  • objc와 호환되는 메서드(ex. viewDidLoad() 메서드 등 or @objc 키워드가 붙은 메서드)는 컴파일러가 swift와 objc 와의 호환성을 위해 override를 허용한다.

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

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

📝 참고 사이트

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Swift Swift CS 개념 공부
Projects
None yet
Development

No branches or pull requests

4 participants