Swift
Swift: 접근제어 구현 규칙
소재훈
2022. 2. 15. 01:07
모든 타입에 적용되는 접근 수준의 규칙은
'상위 요소보다 하위 요소가 더 높은 접근 수준을 가질 수 없다'
이다.
비공개 접근 수준으로 정의한 구조체 내부의 프로퍼티로 내부 수준이나 공개 수준을 가지는 프로퍼티를 정의할 수 없고,
함수의 매개변수로 특정 접근 수준이 부여되었을 때, 함수의 접근수준이 매개변수 타입의 접근 수준보다 높을 수 없다.
private class Aclass {
/**
* 비공개 접근 수준으로 정의한 클래스에서
* 공개 접근 수준의 메서드를 정의한다고 해도 메서드의
* 접근 수준도 비공개 접근수준으로 취급된다.
*/
public func someMethod() {
//대충 메서드 내용
}
}
/**
* Aclass의 접근 수준이 비공개 접근 수준이므로
* 공개접근 수준 함수의 매개변수 또는 반환 타입으로 사용될 수 없다.
* 아래의 함수에서도 에러가 발생한다.
*/
public func someFunction(a: Aclass) -> AClass {
return a
}
아래는 요소로 사용되는 InternalCalss와 PrivateStruct의 접근수준이 publicTuple보다 낮기 때문에 둘 다 튜플의 요소로서 사용할 수 없다. 튜플 요소의 접근수준이 튜플의 접근 수준보다 높을 수 없다.
두 번째 privateTuple의 접근 수준이 요소의 접근 수준들보다 같거나 높기 때문에 privateTuple은 사용할 수 있다.
internal class InternalClass {} // 내부 접근수준 클래스
private struct PrivateStruct {} // 비공개 접근수준 구조체
public var publicTuple: (first: InternalClass, second: PrivateStruct) =
(InternalClass(), PrivateStruct()) // 사용할 수 없다.
private var privateTuple: (first: InternalClass, second: PrivateStruct) =
(InternalCalss(), PrivateStruct()) // 사용할 수 있다.
프레임 워크를 만들 때는 다른 모듈에서 특정 기능에 접근할 수 있도록 API에서 사용할 기능을 공개 접근수준(public)으로 지정해주어야 한다. 나머지 요소는 내부 접근수준(internal)이나 비공개 접근 수준(private), 파일 비공개 접근 수준(fileprivate)으로 적절히 설정하면 된다.