본문 바로가기

 𝗔𝗣𝗣𝗟𝗘/SWIFT : GRAMMAR

Swift 기초 문법 - 접근 제한자(access control)

 

 

 

 

접근 제한자(access control)

 

 

💡 접근 제한자(access control)

 

- 코드 내의 속성, 메서드, 클래스 또는 다른 유형의 멤버에 대한 외부 접근을 제어하는 데 사용됨

- 접근 제한자는 코드의 모듈성을 높이고 보안을 강화하며 코드를 더 명확하게 만드는 데 도움이 됨

- 상위 요소보다 하위 요소가 더 높은 접근 수준을 가질 수 없음 

 

 

 

 

 접근 제한자 종류 

open(개방 접근 수준)

   - 다른 모듈에서 해당 클래스를 상속하거나 재정의할 수 있음

   - 클래스와 클래스의 멤버에서만 사용 가능 

open class Vehicle {
    open func startEngine() {
        print("Engine started")
    }
}

open class Car: Vehicle {
    open var carType: String = "Sedan"
}

 

 

public(공개 접근 수준)

   - 주로 프레임워크에서 외부와 연결된 인터페이스를 구현할 때 사용

   - 일반적으로 사용하는 swift의 기본요소는 모두 public(공개 접근 수준)으로 구현되어 있음

   - 다른 모듈에서 사용 가능하며, 해당 모듈 내에서도 액세스할 수 있음

  상속이나 재정의는 제한되지만 일반적으로 모든 속성과 메서드가 외부에서 사용될 수 있음

public struct Point {
    public var x: Int
    public var y: Int

    public init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }

    public mutating func moveByX(_ deltaX: Int, y deltaY: Int) {
        self.x += deltaX
        self.y += deltaY
    }
}

 

 

internal(내부 접근 수준)

   - 기본적으로 Swift의 접근 수준이며, 같은 모듈 내에서만 액세스할 수 있음

   다른 모듈에서는 사용할 수 없음

internal class InternalClass {
    internal var internalProperty: Int = 10

    internal func doSomethingInternally() {
        print("Internal operation performed")
    }
}

internal let internalConstant = 20

 

 

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

   - 같은 파일 내에서만 액세스할 수 있음

   → 클래스의 구현 세부 정보를 숨기고 다른 코드에 영향을 미치지 않도록 하는 데 사용됨

class OuterClass {
    fileprivate var outerVariable = 30

    fileprivate func outerFunction() {
        print("Outer function called")
    }

    fileprivate class InnerClass {
        fileprivate func innerFunction() {
            print("Inner function called")
        }
    }
}

 

 

private(비공개 접근 수준)

   - 가장 제한적인 접근 수준으로, 해당 멤버가 선언된 범위 내에서만 액세스할 수 있음

class MyClass {
    private var privateVariable = 40

    private func privateFunction() {
        print("Private function called")
    }
}

 

 

 

 

 접근 제한자 종류 표 

접근 수준 상속 
재정의 허용
모듈 내 액세스 외부 모듈 액세스 설명 사용 예시
open 허용 가능 가능 다른 모듈에서 해당 클래스를 상속하거나 재정의할 수 있음 외부 프레임워크나 라이브러리의 기본 클래스 확장
public 제한됨 가능 가능 다른 모듈에서 사용 가능하며, 해당 모듈 내에서도 액세스할 수 있음. 상속이나 재정의는 제한됨 모듈의 API를 정의할 때 사용
internal 제한됨 가능 불가능 같은 모듈 내에서만 액세스 가능 기본적으로 Swift의 접근 수준, 모듈 내에서만 사용되는 구현 세부 정보
fileprivate 제한됨 가능 불가능 같은 파일 내에서만 액세스 가능 클래스의 구현 세부 정보를 숨기고 다른 코드에 영향을 미치지 않도록 하는 데 사용됨
private 제한됨 가능 불가능 해당 멤버가 선언된 범위 내에서만 액세스 가능 클래스의 세부 구현을 보호하고 클래스 외부의 코드에 영향을 제한하는 데 사용됨

 

 

 

 

 open(개방 접근 수준)와 public(공개 접근 수준)의 차이점 

구분 open(개방 접근 수준) public(공개 접근 수준)
상속 및 재정의 다른 모듈에서 클래스를 상속하고 재정의 가능 다른 모듈에서 클래스 상속 및 재정의 제한
모듈 내 액세스 가능 가능
외부 모듈 액세스 가능 가능
사용 예시 외부 프레임워크나 라이브러리의 기본 클래스 확장 모듈의 API를 정의할 때 사용

 

 

 

 

 은닉 정도 

[제약 적음] open < public < internal < fileprivate < private [제약 많음]

※ 접근 제한자를 작성하지 않을 경우 internal로 판단

접근수준 키워드 접근도 범위 -
개방 접근수준 open 높음

|
|
|

낮음
모듈 외부 클래스에서만 사용
공개 접근수준 public 모듈 외부  
내부 접근수준 internal 모듈 내부  
파일 외부 비공개 접근수준 fileprivate 파일 내부  
비공개 접근수준 private 기능 정의 내부  

은닉 정도 표 출처: https://co-dong.tistory.com/17

 

 

 

Recent Posts
Visits
Today
Yesterday
Archives
Calendar
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31