새로운 접근한정자 open, fileprivate에 대해

2016-10-09
15 Views

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를 선언해야 접근할 수 있게 되었다는 것이다.

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

 

Facebook Comments

You may be interested

Xcode 기능 확장(Extension) 제거하기
Xcode
shares3 views
Xcode
shares3 views

Xcode 기능 확장(Extension) 제거하기

MJ Kim - 3월 18, 2017

Mac에서 Xcode Source Editor Extension등의 기능확장을 사용하다보면 디버깅시 시스템 환경 설정의 확장이 앱에 등록되는 경우가 있다. 계속해서 목록이 남아 있기…

iOS App Store Review(앱 심사약관) 번역
Swift 3.0
shares108 views
Swift 3.0
shares108 views

iOS App Store Review(앱 심사약관) 번역

MJ Kim - 3월 15, 2017

App Store Review를 번역했다. 사실 이번에 좀 애매한 리젝을 당해서 그걸 이해하고자 정리해본다. 원문링크: https://developer.apple.com/app-store/review/guidelines/ 1. 이약관은? 1.1 앱 개발자로서 프로그램의…

Raspberry Pi 타이머 On/Off 전원제어모듈 RPi1114-Raspberry Pi
IoT by Raspberry Pi
shares7 views
IoT by Raspberry Pi
shares7 views

Raspberry Pi 타이머 On/Off 전원제어모듈 RPi1114-Raspberry Pi

MJ Kim - 3월 04, 2017

RPi1114-Raspberry Pi전원제어 모듈이 있다. 이 제품은 40Pin GPIO핀헤더에 연결하여 사용하는 모듈로 Cortax-M0마이크로컨트롤러 LPC1114를 내장하고 Raspberry Pi의 시작과 정지 순서등을 프로그래밍할…