접근 제어는 외부 코드에 대한 접근성
과 가시성(visibility)
을 제한한다.
접근 제어는 상세 구현을 숨기고 외부 코드가 접근했으면 하는 인터페이스만 노출시킨다.
스위프트에는 다섯 가지의 접근 단계가 존재한다.
open
은 모듈을 임포트하고자 하는 어느 곳에서든 프로퍼티나 메소드, 클래스 등을 사용할 수 있게 해준다.
기본적으로 접근 제어 단계를 open
으로 하는 아이템은 누구나 사용할 수 있다.
open
으로 표시된 아이템은 해당 아이템이 정의된 모듈 내에 있는 모든 아이템에서 서브클래싱이나 오버라이딩을 할 수 있으며,
해당 아이템이 정의된 모듈을 임포트한 모듈에서도 이를 서브클래싱하거나 오버라이딩할 수 있다.
open
은 주로 프레임워크에서 프레임워크의 공개 API를 노출시키기 위해 사용한다.
public
접근 단계는 모듈을 임포트하고자 하는 어느 곳에서나 프로퍼티나 메소드, 클래스 등을 사용할 수 있게 해준다.
기본적으로 접근 제어 단계를 public
으로 하는 아이템은 누구나 사용할 수 있다
public
으로 표기된 아이템은 해당 아이템이 정의된 모듈 내에 있는 모든 아이템에서 서브클래싱하거나 오버라이딩할 수 있다.
해당 아이템이 정의된 모듈을 임포트한 모듈에서도 이를 서브클래싱하거나 오버라이딩할 수 있다. (open
과 차이점)
public
은open
과 다르게 다른 프로젝트의 모듈에서는 사용할 수 없다.
동일한 프로젝트 내의 모듈에서 사용이 가능하다.
public
은 주로 프레임워크에서 프레임워크의 공개 API를 노출하기 위해 사용한다.
internal
은 기본이 되는 접근 단계로 접근 제어를 명시하지 않는다면 internal이 된다.
internal
접근 단계는 아이템이 정의된 모듈 내부에서 프로퍼티와 메소드 클래스 등을 사용할 수 있게 해준다.
프레임워크에서 이러한 접근 단계를 사용할 경우 프레임워크의 다른 부분에서는 아이템을 사용할 수 있지만,
프레임워크 외부 코드에서는 아이템에 접근할 수 없다.
fileprivate
접근 제어는 아이템이 정의돼 있는 소스 파일과 동일한 코드 내부에서 프로퍼티와 메소드의 접근을 허용한다.
private
는 가장 엄격한 접근 제어 단계다.
private
는 이를 정의한 소스 파일 내부에서만 프로퍼티와 메소드, 클래스 등을 사용하는 것을 허용한다.
fileprivate
와 달리 같은 파일 안에 있어도 서로 다른 객체가private
으로 선언되어 있다면 둘은 서로 접근할 수 없다.