23-1. 접근 제어(Access Control)의 개념

🌈 devleeky16498·2022년 4월 24일
0

접근 제어는 다른 소스 파일과 모듈에서 코드 부분의 접근에 대해서 제한을 주는 기능이다. 특정 접근 수준을 개별 타입(클래스, 구조체 및 열거형) 뿐만 아니라 해당 타입에 속하는 프로퍼티, 메서드, 초기호 구문과 서브스크립트에 할당 가능하다.

모듈과 소스파일

  1. 스위프트에서 접근 제어 모델은 모듈과 소스파일 개념을 기초로 한다. 모듈은 단일 단위로 빌드되고 제공되는 프레임워크 또는 앱과 같은 코드 배포의 단일 단위이며, import 키워드를 통해서 다른 모듈에서 가져올 수 있다.
  2. 소스파일은 모듈 내 단일 스위프트 소스코드 파일이다. 개별 타입을 별도의 소스파일에 정의하는 것이 일반 적이지만 단일 소스파일에 여러 타입, 함수 등에 대한 정의가 포함 될수도 있다.

접근 수준(Access Level)

스위프트는 코드 내에서 5개의 다른 접근 수준을 제공한다. 이 접근 수준은 소스파일과 관련되며 소스 파일이 속한 모듈과 관련된다.

  1. Open 접근과 public 접근은 정의한 모듈의 모든 소스파일과 정의한 모듈을 가져오는(import를 통해서) 다른 모듈의 소스파일에서 컨텐츠 사용이 가능하다. 일반적으로 프레임워크를 공개적 인터페이스로 지정 시 open 또는 public으로 지정한다.
  2. Internal 접근은 정의한 모듈의 소스파일 내에서 사용 가능하지만, 해당 모듈 외부의 소스파일에서는 사용 불가능하다. 일반적으로 앱 또는 프레임위크 내부의 구조체를 정의할 때 internal을 사용한다.
  3. File-private 접근은 자체 정의한 소스파일로서의 사용을 제한한다. 세부내용은 파일 전체에서 사용되고 기능의 특정 부분 구현 세부정보를 가리기 위해 file-private을 사용한다.
  4. private 접근은 둘러싸인 선언과 같은 파일에 있는 해당 선언의 확장으로 컨텐츠 사용을 제한한다. 세부내용은 단일 선언에서만 ㅏ용되며, 특정 부분의 세부 구현 정보를 가리기 위해 사용한다.
  5. Open접근이 가장 개방적이며, private이 가장 폐쇄적인 접근 수준이다.

접근 수준의 기본 원칙

스위프트에서 접근 수준은 전반적인 기본 원칙을 따른다. 컨텐츠는 더 낮은(더 제한적인) 접근 수준을 가진 다른 컨텐츠로 정의할 수 없다.

  • public 변수는 internal, file-private, private으로 정의될 수 없다. 타입의 개념이 다르기 때문이다.
  • 함수는 파라미터 타입과 반환 타입보다 더 높은 접근 수준을 가질 수 없다.
  • 스위프트에서 모든 코드는 명시적으로 접근 수준을 지정하지 않는다면 internal의 기본 접근 수준을 가진다. 따라서 많은 경우 코드에서 명시적으로 접근 수준을 지정할 필요는 없다.

접근 수준 키워드

public class SomePublicClass{}
internal class SomeInternamClass{}
fileprivate class SomeFilePrivateClass{}
private class SomePrivateClass {}
//클래스에 대한 접근 수준을 정의할 수 있다.

public var somePublicVariable = 0
internal let someInteralConstant = 0
fileprivate func someFunction(){}
private func somePrivateFunction() {}
//다르게 지정하지 않는 한 기본적으로 internal 수준을 가진다.
profile
Welcome to Growing iOS developer's Blog! Enjoy!🔥

0개의 댓글