Swift

[Swift] 접근 제어(Access Control) - 접근 레벨

devharrry 2018. 4. 10. 17:08

접근 레벨(Access Levels)


Swift는 코드 내의 엔티티에 대해 다섯 가지 접근 레벨을 제공합니다.

이러한 접근 레벨은 엔티티가 정의 된 소스 파일에 관련이 있으며, 소스 파일이 속한 모듈과도 관련이 있습니다.

 

1. open access 및 public access을 통해 엔티티를 정의 모듈의 모든 소스 파일 내에서 사용할 수 있으며, 정의한 모듈을 가져오는 다른 모듈의 소스파일에서도 사용할 수 있습니다. 일반적으로 공용 인터페이스를 지정할 때 사용합니다.

 

2. internal access는 엔티티가 정의 모듈의 모든 소스 파일내에서 사용되지만 해당 모듈 외부의 소스 파일에서는 사용되지 않도록 합니다. 일반적으로 앱이나 프레임워크의 내부 구조를 정의할 때 사용합니다.

 

3. file-private access는 자체 정의 소스 파일에 대한 엔티티에 사용을 제한합니다. 전체 파일 내에서 특정 함수 세부 구현 정보를 숨길 때 사용합니다.


4. private access는 엔티티의 사용을 선언된 영역(enclosing)에서만 요소를 사용할 수 있도록 제한합니다. 단일 정의 내에서만 사용되는 특정 기능 조각의 구현 상세 내역을 숨길 때 사용합니다.


(open -> public -> internal -> file-private -> private 순으로 제한적입니다)

 


open access는 클래스 및 클래스 멤버에만 적용되며, 다음과 같이 public access와 다릅니다.

 

1. public access 또는 더 제한적인 접근 수준(internal, file-private, private)이 있는 클래스는 정의 된 모듈내에서만 서브 클래싱 할 수 있습니다.

2. public access 권한이 있는 클래스 멤버 또는 제한적인 접근 수준은 정의 된 모듈내에서만 하위 클래스에 의해 오버라이드 할 수 있습니다.

3. open 클래스는 정의 된 모듈 내에서 서브 클래싱 될 수 있으며 정의 된 모듈을 가져 오는 모듈 내에서 서브 클래싱 될 수 있습니다.

4. open 클래스 멤버는 정의 된 모듈 내의 하위 클래스와 정의 된 모듈을 가져오는 모든 모듈에서 오버라이드 할 수 있습니다.

 

( open class : 프레임워크 외부 내부 어디든 서브 클래싱, 오버라이드 가능

  public, internal, file-private, private class : 프레임워크 내부에서만 서브 클래싱, 오버라이드 가능 )

 

클래스를 명시적으로 open으로 표시하면, 해당 클래스를 슈퍼클래스로 사용하는 다른 모듈에서 가져온 코드의 영향을 고려했으므로 클래스 코드를 적절하게 디자인했음을 나타냅니다.