Mobile-아이폰iOS

Swift 3.0부터 open과 fileprivate라는 새로운 접근한정자 추가

무한열정 2017. 6. 3. 17:57

https://swifter.kr/2016/10/09/%EC%83%88%EB%A1%9C%EC%9A%B4-%EC%A0%91%EA%B7%BC%ED%95%9C%EC%A0%95%EC%9E%90-open-fileprivate%EC%97%90-%EB%8C%80%ED%95%B4/

유용한 내용이라 위에 링크에서 발췌하였습니다.


Swift 3.0부터 open과 fileprivate라는 새로운 접근한정자가 추가되었다.

  • open : 모듈 외부에서 접근할 수 있는 가장 느슨한 접근한정자 (신규)
  • public : 모듈 외부에서 접근할 수 있지만 상속은 되지 않고 override할수 없다
  • internal : 모듈일 경우 접근이 가능하고 아무것도 쓰지 않는 경우 기본 설정되는 접근한정자이다.
  • fileprivate : 단어 그대로 파일일 경우 접근할 수 있는 접근한정자이다. (신규)
  • private: 클래스 등이 선언된 영역내에서만 접근이 가능하다.

Open 접근한정자

새롭게 추가된 접근한정자(Access Control)로 이전까지는 public으로 다른 모듈을 인스턴스화한 클래스를 사용할 수 있었고 하위 클래스를 정의할 수도 있었다. 또한 맴버(method, property, subscript)를 오버라이드할 수 있었다.

Swift 3.0부터 추가된 Open은  이전의 접근방법을 좀더 세분화한 것이라고 볼 수 있다. open과 public은 다른 모듈에서 사용이 가능하지만, public은 상속되지 않는다.

  • 오버라이드할 수 없고 상속되지 않게 할 경우 이전까지는 final public으로 선언하던 것으로 Swift 3.0부터는 public만 선언한다.
  • 오버라이드할 수 있고 하위클래스화할 경우 이전까지는 public으로 선언했지만 Swift 3.0부터는 open으로 선언한다.

단, open을 사용시 상위클래스도 open이 아니면 안된다.

여기서 지속적으로 나오는 단어중 모듈(module)은 라이브러리등을 import하여 사용하는 것중 UIKit, MapKit, CoreData등이 이에 해당한다.

Swift 2.x

Swift 3.0

fileprivate 접근한정자

같은 파일일 경우 접근할 수 있도록 한 접근 한정자이다.

swift3-fileprivate

Swift 2.x

Swift 3.0

예제를 비교해보면 Swift 2.x까지는 같은 파일내에서 선언된 경우, private도 접근할 수 있었지만 Swift 3.0부터는 명시적으로 fileprivate를 선언해야 접근할 수 있게 되었다는 것이다.

이는 좀더 접근한정자를 세분화하여 명확하게 접근범위를 정했다는 것이고 개발자들에게는 크게 영향을 미치지는 않을 것으로 예상된다.