2024.02.23 - [iOS/SWIFT] - [Swift] iOS 커스텀 프레임워크 생성하고 사용하기
2024.02.26 - [iOS/SWIFT] - [Swift] 프레임워크와 라이브러리 (1)
2024.02.27 - [iOS/SWIFT] - [Swift] 프레임워크와 라이브러리 (2) UIKit SnapKit으로 비교하기
2024.02.29 - [iOS/SWIFT] - [Swift] 프레임워크와 라이브러리 (3) 접근제한자
프레임워크와 라이브러리를 개발하거나 사용할 때,
접근제한자는 아주 중요한 역할을 해요
이 접근제한자를 어떻게 사용하느냐에 따라서 만들어둔 프레임워크/라이브러리의 사용 가능 범위가 달라진답니다!!
🩵접근제한자
- open
- 클래스, 클래스의 멤버에서만 사용 가능
- open으로 선언된 클래스는 다른 모듈에서 상속될 수 있음
- 다른 모듈에서 오버라이드 될 수 있음
- public
- 타입이나 멤버를 다른 모듈에서 접근할 수 있게 해줌
- 상속/오버라이드는 해당 모듈 안에서만 가능
- internal
- 명시적으로 접근제한자를 지정하지 않는다면 갖게되는 기본적인 접근 수준
- 같은 모듈 안에서만 접근할 수 있음
- 모듈 외부에서는 접근할 수 없음
- fileprivate
- 선언한 소스 파일 내부에서만 접근 가능
- 같은 파일 내부라면, 다른 타입이나 확장에서도 접근할 수 있음
- private
- 가장 제한적인 접근 수준
- private로 선언된 요소는 포함되어 있는 코드 블럭 / 확장에서만 접근 가능
- Swift 4 부터는 같은 파일의 확장에서도 접근할 수 있게 됨
보편적으로는 public, private 을 가장 많이 사용하시는 것 같아요!
🩵 사용 예시들
✔️ 내부 구현 숨기기
프레임워크 등을 개발할 때, 내부적으로만 사용되는 함수나 프로퍼티를
private / fileprivate로 선언하여
사용자가 볼 필요가 없는 구현 세부 사항을 숨길 수 있습니다
public class SomePublicClass {
fileprivate func someFilePrivateMethod() {}
private var somePrivateProperty = 0
}
✔️ 상속/오버라이드 제어
프레임워크/라이브러리에서
제공하는 클래스를 다른 모듈에서 상속하거나
메서드를 오버라이드 할 수 있게 하려면
open으로 선언하여 접근 제한을 완화시켜주어야 해요
open class OpenClass {
open var openProperty: Int = 0
public var publicProperty: Int = 0
}
public class PublicClass: OpenClass {
override open var openProperty: Int { // 오버라이드 가능
didSet { /*...*/ }
}
// publicProperty는 오버라이드할 수 없음
}
✔️ 모듈 간 인터페이스 제공
공개적인 인터페이스를 정의할 때는
public / open 을 사용해요
이렇게 다른 모듈에서 해당 타입이나 멤버를 사용할 수 있게 만들어줍니다
public struct PublicStruct {
public var publicProperty: Int = 0
var internalProperty: Int = 0 // 기본적으로 internal
}
❗ 캡슐화, 정보 은닉
접근 제한자는 코드의 캡슐화, 정보 은닉에 큰 도움이 됩니다
프레임워크나 라이브러리를 설계할 때 접근 제한자를 적절히 사용해서
- API의 공개 범위를 제어
- 내부 구현 세부 사항 숨기기
- 상속/오버라이드를 통한 확장성 관리
등을 챙겨갈 수 있어요!
무작정 public으로 구현해도 무리없이 돌아가겠지만
적당히 private을 사용하여 사소한 정보는 숨겨보는 것도 좋은 연습이 될 것 같아요
저는 사실 계속 public을 빼먹어서 몇번이나 재빌드를 한 적이 있답니다
시간 날 때마다 접근 제한자는 계속계속 복기하는 게 좋을 것 같아요
~ヾ(^∇^)
2024.02.23 - [iOS/SWIFT] - [Swift] iOS 커스텀 프레임워크 생성하고 사용하기
2024.02.26 - [iOS/SWIFT] - [Swift] 프레임워크와 라이브러리 (1)
2024.02.27 - [iOS/SWIFT] - [Swift] 프레임워크와 라이브러리 (2) UIKit SnapKit으로 비교하기
2024.02.29 - [iOS/SWIFT] - [Swift] 프레임워크와 라이브러리 (3) 접근제한자
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/accesscontrol/
'iOS > Swift' 카테고리의 다른 글
[Swift] iOS 알림 설정 허용받기 - User Notifications (0) | 2024.03.02 |
---|---|
[Swift] CollectionView 동적으로 Cell 크기 계산하기 (2) | 2024.03.01 |
[Swift] 프레임워크와 라이브러리 (2) UIKit SnapKit으로 비교하기 (0) | 2024.02.27 |
[Swift] 프레임워크와 라이브러리 (1) (0) | 2024.02.26 |
[Swift] iOS 커스텀 프레임워크 생성하고 사용하기 (0) | 2024.02.23 |