본문 바로가기
Swift/기본

접근 제어자 (Access Control)

by 밤새는탐험가 2024. 4. 17.

코드에서 상호작용을 할 때 

소스 파일 간 또는 모듈 간 접근을 제한할 수 있는 기능을 말한다.

 

⭐특정 코드의 세부적인 구현을 숨기거나, 허용된 기능만 사용하는 인터페이스를 제공할 수 있다.⭐

 

✅ 모듈: 배포할 코드의 묶음 단위로 "import" 를 통해 불러오는 것을 말한다. 

✅ 소스파일: Swift 코드 파일 1개를 의미한다. 

✅ 파일 간 또는 모듈 간에 접근 제한하는 목적은 "은닉화"에 있다. 

 

 

 

접근 레벨의 종류 

 

 

 

open - 개방 접근수준

  • 가장 넓은 범위
  • 지정된 요소는 어디서든 사용 가능하다. 
  • Open은 클래스에만 사용 가능하다.
  • Open에서만 클래스가 정의된 모듈 외부에서도 subclassing할 수 있다.
  • Open에서만 클래스가 정의된 모듈 외부에서 override 할 수 있다.

 

public - 공개 접근수준

  • public 키워드로 접근 수준이 지정된 요소는 어디서든 쓰일 수 있다. 
  • 자신이 구현된 소스파일은 물론, 그 소스파일이 속해 있는 모듈, 그 모듈을 가져다 쓰는 모듈 등 모든 곳에서 사용 가능하다
  • 공개 접근 수준은 주로 프레임워크에서 외부와 연결될 인터페이스를 구현하는데 많이 쓰인다.
  • 우리가 사용하는 스위프트이 기본 요소는 모두 공개 접근수준으로 구현되어 있다.

 

internal - 내부 접근수준

  • internal 키워드로 지정하는 내부 접근수준은 기본적으로 모든 요소에 암묵적으로 지정하는 기본 접근수준이다.
  • 내부 접근수준으로 지정된 요소는 소스파일이 속해있는 모듈 어디에서든 쓰일 수 있다. 
  • 단, 그 모듈을 갖다 쓰는 외무 모듈에서는 접근할 수 없다
  • 외부에서 사용할 클래스나 구조체가 아니고, 모듈 내부에서 사용할 경우 내부 접근수준으로 지정한다.

 

 

fileprivate -  파일 외부 비공개 접근수준

  • fileprivate 키워드로 지정된 요소는 그 요소가 구현된 소스파일 내부에서만 사용할 수 있다. 
  • 해당 소스파일 외부에서 값이 변경되거나 함수를 호출함면 부작용이 생길 수 있다.

 

private - 비공개 접근수준

  • 가장 한정적인 범위이다. 
  • private으로 지정된 요소는 그 기능을 정의하고, 구현한 범위 내에서만 사용할 수 있다. 
  • 또한, 같은 소스파일 안에 구현한 다른 타입이나 기능에서도 사용할 수 없다. 

✅ 싱글톤을 사용할 때 쓰인다. 

class UserInfo {
    static let shared = UserInfo() // 이때 단 한번만 생성된다.

    var id: String?
    var password: String?
    var name: String?
    private init() { } 
}

 

 

 

⭐ 주의할 점 ⭐

상위 요소보다 하위 요소가 더 높은 접근 수준을 가지면 안된다. 

private class EClass{ 
    public func method(){} // private 내부에 public 키워드를 사용해도 소용없다.
}

public func eMethod(_ : EClass){ // private 클래스를 인자로 받을 수 없다.
    print("get Eclass")
}

 

 

'Swift > 기본' 카테고리의 다른 글

ARC 1편 - ARC 란?  (0) 2024.04.19
메모리 구조 (Code, Data, Stack, Heap)  (1) 2024.04.18
서브스크립트  (1) 2024.04.16
제네릭 (제네릭 제약, 제네릭 확장, 제네릭 함수와 오버로딩)  (0) 2024.04.16
제네릭  (0) 2024.04.15