Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Refactoring
- UITextView
- Observable
- HIG
- 리팩토링
- tableView
- ios
- Human interface guide
- swift documentation
- collectionview
- uiscrollview
- UICollectionView
- Protocol
- 스위프트
- RxCocoa
- combine
- swiftUI
- clean architecture
- uitableview
- ribs
- 애니메이션
- map
- 리펙터링
- MVVM
- Xcode
- 클린 코드
- rxswift
- Clean Code
- SWIFT
- 리펙토링
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] @_implementationOnly 개념 (프레임워크, 모듈, 내부 모듈 숨기기, imported as implementation-only) 본문
iOS 응용 (swift)
[iOS - swift] @_implementationOnly 개념 (프레임워크, 모듈, 내부 모듈 숨기기, imported as implementation-only)
jake-kim 2023. 8. 2. 01:21@_implementationOnly 개념
- 일반적으로 AFramework가 BFramework를 의존하고 있을 때, AFramework 의존만해도 BFramework를 import하여 사용이 가능
- 하지만 Aframework를 사용하는 앱 입장에서, import를 안하면 BFrmaework의 모델 타입을 아예 모르게끔 하기 위해서 @_implementationOnly를 사용
// AFramework
@_implementationOnly import BFramework
- @_implementationOnly를 사용하면 AFramework안에서 BFramework관련 타입을 리턴하거나, 프로퍼티로 갖거나, 파라미터로 갖을수 없게 컴파일 에러가 발생
- (AFramework를 사용하는 입장에서 BFramework의 존재를 모르게 하기 위함)
(AFramework안에서 BFramework 관련 모델을 노출하는 코드가 존재하면 컴파일 에러가 발생)
- 만약 @_implementationOnly import BFramework를 사용하지 않으면 컴파일 에러가 안나게 되고, AFramework를 사용하는 쪽에서는 import BFramework를 안해도 BModel 접근이 가능
// AFramework
import Foundation
//@_implementationOnly import BFramework
import BFramework
public struct AModel {
public let bModel = BModel(name: "iOS 앱 개발 알아가기")
public var bModel2: BModel {
.init(name: "iOS 앱 개발 알아가기")
}
public init() {
print("jake")
let bModelInstance = BModel(name: "jake")
}
public func printSome(bModel: BModel) {
print("jake")
}
public func getBModel() -> BModel {
BModel(name: "jake")
}
}
- @_implementationOnly를 안쓰면 AFramework를 사용하는 쪽에서는 import BFramework를 안해도 BModel 접근이 가능
정리
- @_implementationOnly import A 하면 이것을 선언한 곳에서 A 관련 모듈을 접근할 때, A를 그대로 외부에 노출시키지 않도록 컴파일 에러가 강제
- @_implementationOnly import A 를 선언한 프레임워크를 사용할 때, A에 관한 모듈 접근하는 코드가 없기 때문에 import없이 접근이 불가능하여, 코드의 응집도 올리기가 가능
* 전체 코드: https://github.com/JK0369/EximplementationOnly
* 참고
'iOS 응용 (swift)' 카테고리의 다른 글
Comments