Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
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
Archives
Today
Total
관리 메뉴

Jupyo's Daily Story

접근제어(Access Control) 본문

Swift

접근제어(Access Control)

JangJupyo 2022. 11. 24. 10:21
728x90
반응형

접근 제어(Access Control)는 코드 내에서 특정 클래스, 구조체, 열거형, 프로퍼티, 메서드 등의 접근 범위를 정의하는 기능입니다.

이를 통해 외부에서 해당 코드에 접근할 수 있는 범위를 제한할 수 있어 코드의 안정성과 보안을 강화할 수 있습니다.

 

Swift에서는 총 5가지 접근 수준을 제공하며, 이를 이용해 접근 범위를 제어할 수 있습니다.

 

1. open

  • 정의: 외부 모듈에서 접근이 가능하며, 해당 클래스나 멤버는 서브클래싱 및 오버라이딩이 가능합니다.
  • 주요 사용처: 프레임워크나 라이브러리에서 외부에서 상속받거나 수정할 수 있도록 허용하고자 할 때
  • 특징: open으로 정의된 클래스는 외부 모듈에서도 서브클래싱이 가능하며, 메서드는 오버라이딩할 수 있습니다.
open class Animal {
    open func makeSound() {
        print("Animal sound")
    }
}

// 다른 모듈에서도 서브클래싱 가능
class Dog: Animal {
    override func makeSound() {
        print("Bark")
    }
}

 

2. public

  • 정의: 외부 모듈에서 접근 가능하지만, 서브클래싱 및 오버라이딩은 불가능합니다.
  • 주요 사용처: 외부에서 사용하되, 상속이나 메서드 재정의는 허용하지 않으려 할 때
  • 특징: public으로 정의된 클래스나 메서드는 외부에서 접근할 수 있지만, 서브클래싱이나 오버라이딩은 같은 모듈 내에서만 가능합니다.
public class Animal {
    public func makeSound() {
        print("Animal sound")
    }
}

// 외부 모듈에서는 서브클래싱 불가

 

3. internal

  • 정의: 같은 모듈 내에서만 접근 가능하며, 다른 모듈에서는 접근할 수 없습니다.
  • 주요 사용처: 앱 또는 프레임워크 내부에서만 사용할 수 있고, 외부에서는 사용을 제한하고자 할 때
  • 특징: 기본적으로 모든 요소는 internal입니다. 이를 통해 같은 모듈 내에서는 자유롭게 사용할 수 있지만, 외부 모듈에서는 접근할 수 없습니다.
fileprivate class Animal {
    func makeSound() {
        print("Animal sound")
    }
}

// 같은 파일 내에서만 사용 가능

 

4. fileprivate

  • 정의: 동일한 파일 내에서만 접근 가능
  • 주요 사용처: 한 파일 내에서만 접근을 허용하고자 할 때, 클래스의 세부 구현을 숨기고 싶을 때 사용됩니다.
  • 특징: fileprivate로 선언된 멤버는 같은 파일 내의 다른 클래스나 구조체에서도 접근할 수 있지만, 파일을 벗어나면 접근할 수 없습니다.
fileprivate class Animal {
    func makeSound() {
        print("Animal sound")
    }
}

// 같은 파일 내에서만 사용 가능

 

5. private

  • 정의: 동일한 정의 범위(클래스, 구조체) 내에서만 접근 가능하며, 같은 파일 내의 다른 클래스나 구조체에서도 접근할 수 없습니다.
  • 주요 사용처: 특정 클래스 또는 구조체 내부에서만 사용할 수 있도록 하여, 외부에서의 접근을 완전히 차단하고자 할 때
  • 특징: private로 선언된 멤버는 오직 해당 클래스 또는 구조체 내에서만 접근 가능합니다.
class Animal {
    private func makeSound() {
        print("Animal sound")
    }
}

let animal = Animal()
// animal.makeSound() // 오류 발생, private 접근 불가

 

요약

  • open: 외부에서 서브클래싱 및 오버라이딩 가능
  • public: 외부에서 접근 가능, 서브클래싱 및 오버라이딩은 불가
  • internal: 같은 모듈 내에서만 접근 가능 (기본 접근 수준)
  • fileprivate: 같은 파일 내에서만 접근 가능
  • private: 같은 클래스 또는 구조체 내부에서만 접근 가능

접근 제어는 코드의 사용 범위를 명확히 정의하고, 외부에서 불필요한 수정이나 접근을 방지하는 데 중요한 역할을 합니다.

반응형

'Swift' 카테고리의 다른 글

백그라운드 Playback  (0) 2024.02.20
lazy  (2) 2022.11.24
final  (0) 2022.11.24
포맷 지정자  (0) 2022.11.18
[문자열] 이메일 검증하기  (0) 2022.11.17