스위프트의 접근제어

개요


스위프트에서 은닉화를 담당하는 접근제어 Access Control에 대해 알아보겠다.




접근제어


코드끼리 상호작용을 할 때 파일 간 또는 모듈 간에 접근을 제한할 수 있는 기능이다.

캡슐화와 은닉화를 구현할 수 있다.




접근수준


접근수준 키워드 접근도 범위
개방 open 매우 높음 모듈외부까지
공개 public 높음 모듈외부까지
내부 internal 중간 모듈내부
파일외부비공개 fileprivate 낮음 파일내부
비공개 private 매우낮음 기능정의내부




open


클래스에서만 사용할 수 있다. 기본적으로 public과 비슷하다. 클래스를 open으로 명시하는 것은 다른 곳에서도 부모클래스로 사용하겠다는 목적이다.




public


어디서든 접근가능하다. 주로 프레임워크에서 외부와 연결될 인터페이스를 구현할 때 많이 사용한다.




internal


기본적으로 모든 요소에 암묵적으로 지정하는 기본 접근 수준이다.

소스파일이 속해있는 모듈 어디서든 사용할 수 있지만 외부 모듈에서는 불가능하다.

보통 외부에서 사용할 클래스나 구조체가 아니며, 모듈 내부에서만 사용할 때 지정한다.




fileprivate


fileprivate으로 선언된 곳의 파일에서만 사용할 수 있다. 소스파일 외부에서 값이 변경되면 위험할 경우 사용한다.




private


기능을 정의한 곳에서만 사용할 수 있다.




읽기 전용 구현


구조체 또는 클래스를 사용하여 저장 프로퍼티를 구현할 때는 허용된 접근 수준에서 접근할 수 있다.

값을 변경할 수 없고 읽기만 가능하게 하고 싶다면 어떻게 할까?

Setter만 더 낮은 접근 수준을 갖도록 제한할 수 있다. 접근수준(set)을 사용하면 set만 제한한다.