접근 제어

  • 접근 제어의 종류는 Open, Public, Internal, Fileprivate, Private 총 5개 이다.
  • 이 중 Open과 Public은 모듈 단위에서 사용되는 접근제어이다.
  • Internal은 가장 기본이 되는 형태이며 키워드를 생략한 상태로 보통 쓰는 방식이다.
  • Fileprivate와 Private는 소스 파일 단위에서 사용되는 접근 제어이다.
  • 즉, 기본은 모두 Internal이며 모듈 단위에서는 Open, Public을 쓰며, 소스 파일 단위에서는 Fileprivate과 private을 사용한다.

모듈

  • 모듈이란 하나의 앱, framework 등 덩어리라고 볼 수 있다.
  • UI를 사용하기 위해서는 UIkit 이라는 덩어리를 import 시켜야 하며, 문자열이나 시간, 데이터 등 다양한 변수나 함수를 사용하기 위해 Foundation 이라는 덩어리를 import 시키듯 이 한 덩어리가 모듈이다.
  • 이 덩어리들이 모여 완성된 하나의 앱도 모듈이다. 즉 제일 작은 덩어리를 포함하는 모든 덩어리는 모듈이다. (최하 단위가 framework라 볼 수 있다.)

소스 파일

  • 소스 파일이란 Xcode 사용시 흔히 볼 수 있는 블라블라.swift에 해당하는 것이다.
  • 새 프로젝트를 만들면 기본적으로 생성되는 ViewController.swift도 소스 파일이다.
  • 이런 소스 파일들이 모여 하나의 모듈이 완성된다.

Open과 Public의 차이

  • Open 접근 수준은 모듈 외부 즉, import한 주체 프로젝트에서 상속과 재정의가 가능하다.
  • Public 접근 수준은 모듈 외부 즉, import한 주체 프로젝트에서 사용은 가능하나 상속이나 재정의는 불가능하다.

Internal

  • 가장 기본이 되는 Internal은 정의된 모듈에서만 사용이 가능하다.
  • 즉, 모듈 외부에서는 사용이 불가능하다.

Fileprivate과 Private의 차이

  • Fileprivate 접근 수준은 소스 파일에서만 사용된다.
  • 즉, Fileprivate 접근 수준은 정의된 모듈이 아니라 블라블라.swift에서만 사용이 가능하다.
  • Fileprivate는 상속과 재정의가 가능한데, 상속할 인스턴스도 Fileprivate 접근 수준이어야만 한다. (Private도 가능)
  • Private 접근 수준은 소스 파일 내부에서도 접근을 원치 않는 요소에서 사용한다.

한 줄 요약

  • Open 접근 수준은 import 하면 상속, 재정의든 마음대로 할 수 있다.
  • Public 접근 수준은 import 하면 사용만 할 수 있다.
  • Internal 접근 수준은 import 해도 사용할 수 없다.
  • Fileprivate 접근 수준은 소스 파일 내부에서만 사용할 수 있다. (같은 접근 수준이라는 전제하에)
  • Private 접근 수준은 소스 파일 내부에서도 접근을 막을 수 있다.