Search

[Swift 공식 문서] 27. Access Control

Access Control

Access Control(이하 접근제어) 는 다른 소스파일과 모듈의 코드가 여러분의 코드에 접근하지 못하도록 제한합니다. 이 기능을 사용해서, 코드의 디테일적인 구현사항을 감출 수 있으며, 그렇게 해서 접근되어서 사용가능한 코드들에 대한 인터페이스를 구체화할 수 있죠.
커스텀 타입들에대한 구체적인 접근 수준을 할당할 수 있습니다. 프로퍼티, 메서드, 이니셜라이저, 서브스크립트와 같이 타입에 속한 모든 것들에 할당 가능합니다. 프로토콜에는 글로벌 상수, 변수, 함수에만 적용이 가능합니다.
추가로 다양한 수준의 접근 제어를 제공하는 것에 더해서, Swift는 전형적인 시나리오에 대해 기본적인 접근 제어 수준을 제공함으로써 접근제어를 분명히 구체화할 노력을 덜어줍니다. 실제로 싱글 타겟 앱을 작성중이라면, 어떠한 수준의 접근제어도 필요하지 않습니다.

Modules and Source Files

Swift 의 접근제어 모델은 모듈과 소스파일의 개념에 기초를 두고 있습니다.
모듈은 분배되어 있는 코드들의 하나의 단위입니다. 프레임워크 또는 하나의 단위로 만들어진 애플리케이션은 Swift 의 import 키워드로 가져와서 사용이 가능합니다.
Xcode안의 각각의 빌드 타겟은 Swift 에서 분리된 모듈로 여겨집니다. 만약 앱의 코드를하나의 프레임워크로서 그룹화한다면, 그 프레임워크 내에 정의한 모든 것은, 분리된 모듈이 됩니다.
소스 파일은 모듈 내의 단일 Swift 소스 코드 파일 입니다. 소스 파일에 걸쳐서 각각의 타입을 정의하는 것이 흔하지만, 하나으 ㅣ소스파일은 여러개의 타입, 함수 등등의 정의를 포함할 수 있죠

Access Levels

스위프트는 다섯개의 다른 접근 수준을 제공합니다. 접급 수준들은 개체가 저장된 소스파일과 관련이 있으며, 소스파일이 속한 모듈과도 상관이 있습니다.
Openpublic 접근은 개체를 정의되어 있는 모듈내의 모든 소스파일에서 사용이 가능하며, 해당 모듈을 import 한 다른 모듈에서도 접근이 가능하도록 만듭니다. 프레임워크에 공용으로 사용되는 인터페이스를 만들고자할 때 open 또는 public 접근을 사용하면 됩니다. 둘의 차이는 아래에서 기술하겠습니다.
Internal 접근은 개체가 모듈 내에 정의된 모든 소스파일에서 사용가능하게 만듭니다. 하지만 모듈 밖의 소스파일에서는 접근이 불가능합니다. internal 접근을 앱 또는 프레임워크의 내부 구조를 정의하는 데 사용하세요.
File-private 접근은 개체가 정의된 소스파일 내에서만 개체에 접근 가능하도록 만듭니다. file-private 접근 을 사용해서, 구체적인 구현사항을 숨기는 데, 사용하세요.
Private 접근은 개체를 선언된 내부, 해당 개체의 extension 에서만 접근가능하도록 제한합니다. private 접근을 사용해서 구체적인 기능의 구현사항을 숨기세요. 해당 사항이 선언된 내부에서만 사용될 때 사용하면 됩니다.
Open 접근은 매우 높은 (제한이 가장 적은) 접근 수준이고, private 는 접근 수준이 매우 낮습니다 ( 가장 제한적인 )
Open 접근은 오직 클래스와 클래스의 구성요소에만 적용 가능합니다.
Openpublic 과 다르게 모듈 바깥의 코드가 subclass, override 하게 허용합니다. 클래스를 open 으로 표시하는 것은 해당 클래스가, 다른 모듈에서 부모클래스로 사용하는 임팩트를 염두에 두었음을 가리킵니다.
즉, open 이라고 표기함으로써, 이 클래스는 상속해서, 덮어써서 사용하면 좋다고 말할 수 있다는 거죠.