WooKoo Blog

물과 같이

개발/개발

[Swift] - Access Control 접근제어자 (open, public, internal, fileprivate, private)

WooKoo 2022. 1. 21. 15:16

Accesss Control(접근제어)

 

Accesss Control(접근제어)는 다른 소스파일 및 모듈의 코드에서, 코드의 일부에 대한 액세스(접근)을 제한합니다.

이 기능을 사용하면, 코드의 구현 세부사항을 숨기고, 해당 코드를 접근하고 사용할 수 있는 기본 인터페이스를 지정할 수 있습니다.

 

개별타입(individualtypes)(클래스, 구조체, 열거) 뿐만아니라 해당 타입에 속하는 프로퍼티, 메소드, 이니셜라이저 및 서브스크립트에 대해 특정접근 레벨을 지정할 수 있다.

 

프로토콜은 전역 상수, 변수 및 함수처럼 특정 컨텍스트로 제한 될 수 있다.

 

 

말 그대로 외부 객체에서 객채 내부의 자료의 접근을 컨트롤하는것

 

  *open 접근은 Class에서만 사용 가능. struct와 eum은 public부터 사용 가능 *

 

 

Modules and Source Files

Swift의 접근 제어모델은 모듈 및 소스파일의 개념을 기반으로 한다.

모듈은 코드 배포의 단일 유닛이다.

 

Access Levels

5가지의 접근 레벨을 제공

 

1. open, public (모든 소스 파일에서 접근 할 때 ex: 유틸, 프레임워크 등등)

- 모든 소스 파일 내에서 사용할 수 있으며 정의한 모듈을 가져오는 다른 모듈의 소스파일에서도 사용이 가능하다.

-프레임워크에 공용 인터페이스 사용할 때 사용

 

 

2. internal (외부 모듈에서는 불가능!)

 

- 정의 모듈의 모든 소스 파일 내에서 사용되지만, 해당 모듈 외부의 소스 파일에서는 사용되지 않도록 한다.

-app이나 프레임워크의 내부 구조를 정의할 때 사용

- 모듈 내에서만 사용이 가능하다. 기본 접근 수준이 이것

 

3. File-private (잘안쓰는 것 같음)

- 자체 정의 소스 파일에 대한 엔티티 사용을 제한한다. 해당 세부 정보가 전체 파일 내에서 사용될 때 특정 기능의 구현 세부 정보를 숨길 수 있다.

- 정의 소스 파일 내에서만 사용이 가능하다.

- 같은 모듈 내에서도 같은 소스 파일 안에서만 사용이 가능!

 

 

4. private

- 단일 정의 내에서만 사용되는 특정 기능 조각의 구현 상세 내역을 숨길 수 있다.

 

open -> public-> internal -> file-private -> private 순으로 갈수록 제한적

 

 

private랑 fileprivate의 차이가 명확하게 글로서 이해가 안된다면

 

같은 파일내에서 다른 클래스를 만들고 그 안에 함수를 호출해보면 

fileprivate는 호출이 가능!

 

 

private는 안됩니다!