728x90
1. 접근 제어란?
- 다른 소스 파일이나 모듈에서 코드에 접근할 수 있는지 여부를 제한.
- 구현 세부사항 은닉 및 공용 인터페이스 정의 목적.
- 클래스, 구조체, 열거형, 프로퍼티, 메서드, 초기화, 서브스크립트, 프로토콜, 전역 함수 등에 적용 가능.
2. 핵심 개념
개념설명
모듈 | 독립적인 빌드/배포 단위 (예: 앱, 프레임워크) |
소스 파일 | 모듈 내의 개별 .swift 파일 |
패키지 | 여러 모듈을 묶은 집합 (SwiftPM 기준) |
3. 접근 수준 5단계
수준설명
open | 가장 개방적. 다른 모듈에서도 상속, 재정의 가능 (클래스/멤버만 사용 가능) |
public | 다른 모듈에서 접근은 가능, 상속/재정의는 불가 |
internal | 기본값. 같은 모듈 내에서만 사용 가능 |
fileprivate | 같은 소스 파일 내에서만 접근 가능 |
private | 같은 선언 블록 및 확장에서만 접근 가능 |
4. 기본 원칙
- 더 제한적인 타입을 사용해서 더 넓은 접근 수준을 가진 변수나 함수는 정의할 수 없음. 예) public var a: PrivateType X
open class SomeOpenClass {}
public class SomePublicClass {}
internal class SomeInternalClass {} // 또는 생략 가능
fileprivate class SomeFilePrivateClass {}
private class SomePrivateClass {}
fileprivate func someFunc() {}
private var someVar: Int = 0
- 단일 앱: internal 기본값으로 충분. 구현 세부는 private 또는 fileprivate로 숨김.
- 프레임워크: 외부에 노출할 인터페이스는 public 또는 open으로 설정.
- 유닛 테스트: @testable import 사용 시 internal도 테스트에서 접근 가능.
공부하려고 정리해두기
728x90
'iOS > Swift' 카테고리의 다른 글
Swift Closure (0) | 2025.05.03 |
---|---|
내가 더 이상 헷갈리기 싫어서 적는 Swift의 핵심 구성 요소 (0) | 2025.05.01 |
Managing your app’s life cycle (0) | 2025.04.30 |
상태를 감지하는 방법 (0) | 2025.04.23 |
SwiftData 모델에 있는 데이터가 빈 값일 수도 있고 아닐 수도 있을 때, 어떻게 처리해야하지? (0) | 2025.04.19 |