나의 발자취
[Swift] 접근제어자 open, public, internal, fileprivate, private 본문
접근제어자는 코드의 캡슐화를 구현하는 중요한 도구로, 다른 소스 파일이나 모듈에서 코드에 접근하는 것을 제한한다.
*아예 접근제어자를 작성하지 않으면 internal이다.
접근제어자 종류 (가장 개방적 → 가장 제한적)
open
- 가장 개방적인 접근 수준
- 다른 모듈에서 상속 및 오버라이드 가능
- 클래스와 클래스 멤버에만 사용 가능
- 프레임워크에서 주로 사용
open class OpenClass {
open func openMethod() { }
}
public
- 모든 소스 파일에서 접근 가능
- 다른 모듈에서 상속 및 오버라이드 불가
- 프레임워크 API로 주로 사용
public class PublicClass {
public func publicMethod() { }
}
internal
- 기본 접근제어자
- 같은 모듈 내에서만 접근 가능
- 명시적으로 지정하지 않으면 기본값으로 사용됨
internal class InternalClass {
internal func internalMethod() { }
}
fileprivate
- 정의된 소스 파일 내에서만 접근 가능
- 같은 파일 내의 extension에서도 접근 가능
fileprivate class FilePrivateClass {
fileprivate func filePrivateMethod() { }
}
private
- 가장 제한적인 접근 수준
- 정의된 범위 내에서만 접근 가능
- 같은 파일의 extension에서도 접근 불가능
open class OpenClass {
open func openMethod() { }
}
접근제어자 사용 지침
모듈과 소스 파일
- 모듈: 배포할 코드의 단위 (앱, 프레임워크 등)
- 소스 파일: 모듈 내의 Swift 소스 코드 파일
접근제어자 선택 기준
- API를 설계할 때: open 또는 public
- 내부 구현할 때: internal
- 세부 구현을 숨길 때: fileprivate 또는 private
public class UserProfile {
// 공개 API
public var name: String
// 내부 구현용
internal var identifier: String
// 파일 내부용
fileprivate var validationStatus: Bool
// 클래스 내부용
private var cleanupTask: (() -> Void)?
}
<SwiftUI>
@State의 경우, 외부에서 접근할 일이 없기 때문에 private로 써주는 일이 많다.
물론, private를 안쓴다고 문제가 생기는 것은 아니다.
그저 애플에서 권장하는 관습대로 사용할때 좋은 것이다.
'앱 개발 > iOS' 카테고리의 다른 글
[SwiftUI] Apple 공식 SwiftUI Tutorials: Landmarks 프로젝트 클론 (0) | 2024.10.30 |
---|---|
[SwiftUI] GeometryReader (0) | 2024.10.30 |
[SwiftUI] View Lifecycle onAppear(), onDisappear(), Picker와 Views 실습 (0) | 2024.10.29 |
[SwiftUI] @State 프로퍼티, @Binding 프로퍼티 (0) | 2024.10.29 |
[iOS] SwiftUI vs UIKit, SwiftUI 특징 (2) | 2024.10.29 |
Comments