티스토리 뷰

iOS

[Swift] 접근제어 (Access Control)

Peppo 2022. 9. 17. 00:55
728x90

다른소스 파일 및 모듈의 코드에서, 코드의 일부에 대한 접근을 제한 하는걸 말합니다.

객체지향에서 중요한 개념인 *은닉화를 구현하기 위해 쓰입니다.

 

은닉화
객체 외부에서 객체 내부의 접근을 제한해 , 데이터 수정을 방지 

모듈과 소스파일 (Modules and Source Files)

 

모듈 

코드를 배포하는 단일 단위

하나의 프레임워크

 

즉, import 해오는것  

예를들어

import Foundation

import Alamofire

이런게 모듈입니다.

 

 

소스파일

모듈안에 있는 소스파일을 의미합니다. 

각 소스파일에 여러 특정 타입을 선언해 사용할 수 있습니다.

 


접근레벨 (Access Levels)

5개의 접근레벨을 제공하며 아래와 같습니다.

 

open & public

다른 모듈에서도 사용이 가능합니다. 

둘의 차이점 Override와 Subclassing의 가능 여부 입니다.

  Open Public
Override,
Subclassing
O X

 

internal

기본 접근레벨로 아무 접근레벨을 선언하지 않으면 Internal로 간주됩니다.

해당 모듈 전체에서 사용가능 해집니다.

아래 두 메서드의 접근레벨은 같습니다.

internal func test() {
        // code..
}
    
func test2() {
        // code..
}

 

fileprivate

소스 파일 (ex. 파일이름.swift) 내에서만 사용이 가능합니다.

 

예를들어 

같은 파일 안에 서로 다른 클래스가 있으며 fileprivate으로 되어있다면 둘은 접근 가능 합니다.

 

 

private

특정 엔티티가 선언된 괄호({}) 내에서만 사용 가능 합니다.

 

Swift4 부터는 같은 소스파일 안에서 extension을 사용하면 접근이 가능합니다. (Swift3에서는 불가능!)

 

private class PrivateClass {
    private var name = "Peppo"
}

// extension 으로 접근하면 가능.
extension PrivateClass {
    func someMethod() {
        print(name)
    }
}
728x90