스위프트 프로그래밍 3판을 보고 정리한 내용입니다.
코드끼리 상호작용할 때 파일 간 모듈 간에 접근을 제한할 수 있는 기능
OOP에서 중요한 캡슐화와 은닉화를 구현한 이유는 외부에서 보거나 접근하면 안되는 코드이기 때문
불필요한 접근으로 의도치 않은 결과를 초래하거나 꼭 필요한 부분만 제공을 해야하는데 전체 코드가 노출될 가능성이 있을 때 접근제어를 이용한다.
스위프트의 접근제어는 모듈과 소스파일을 기반으로 설계되었다.
모듈은 배포할 코드의 묶음 단위 (import를 이용해 불러온다)
소스파일은 하나의 스위프트 소스 코드 파일을 의미한다.
접근 제어는 접근 수준(Access Level)키워드를 통해 구현할 수 있다.
접근 수준을 명시할 수 있는 키워드는 open,public,internal,fileprivate,private 가 있다.
접근 수준 | 키워드 | 접근도 | 범위 | 비고 |
---|---|---|---|---|
개방 접근수준 | open | 높음 | 모듈 외부까지 | 클래스에서만 사용 |
공개 접근수준 | puiblic | ⬆ | 모듈 외부까지 | |
내부 접근수준 | Internal | 모듈 내부 | ||
파일외부비공개 접근수준 | fileprivate | ⬇ | 파일 내부 | |
비공개 접근수준 | private | 낮음 | 기능 정의 내부 |
public 이상으로 높은 접근수준이며, 클래스와 클래스의 맴버에서만 사용할 수 있다.
클래스를 개방 접근수준으로 명시하는 것은 다른 모듈에서도 부모클래스로 사용하겠다는 목적으로 클래스를 설계하고 코드를 작성했음을 의미한다.
public키워드로 접근 수준이 지정된 요소는 어디서든 쓰일 수 있다.
주로 외부와 연결될 인터페이스를 구현하는데 많이 쓰인다.
기본적으로 모든 요소는 암묵적으로 지정하는 기본 접근 수준이다.
소스파일이 속해 있는 모듈 어디에서든 쓰일 수 있다.
외부 모듈에서는 접근 불가
파일외부비공개 접근 수준으로 지정된 요소는 그 요소가 구현된 소스파일 내부에서만 사용 가능하다.
해당 소스파일 외부에서 값이 변경되거나 함수를 호출하면 부작용이 생길수 있는 경우에만 사용하는 것이 좋다.
가장 한정적인범위이다.
비공개 접근수준으로 지정된 요소는 그 기능을 정의하고 구현한 범위 내에서만 사용할 수 있다.
상위 요소보다 하위 요소가 더 높은 접근수준을 가질 수 없다.