notes
IOS- annotation
iOS annotation 주석·문서화 표기와 개발 중 참고 정보 관리 메모.
Swift 어노테이션(Attributes) 정리
Swift에서 어노테이션(속성, Attribute)은 @로 시작하며,
컴파일러에게 특별한 의미를 부여하거나, 코드의 동작을 제어할 때 사용합니다.
1. @IBOutlet
- 스토리보드/인터페이스 빌더와 코드의 UI 요소를 연결할 때 사용
@IBOutlet weak var myLabel: UILabel!
2. @IBAction
- 스토리보드에서 UI 이벤트(버튼 클릭 등)와 함수를 연결할 때 사용
@IBAction func buttonTapped(_ sender: UIButton) { }
3. @objc
- Objective-C와의 호환을 위해 사용
- Selector, Notification, KVO 등에서 필요
@objc func doSomething() { }
4. @available
- 특정 버전 이상에서만 사용할 수 있도록 제한
@available(iOS 15.0, *)
func newFeature() { }
5. @discardableResult
- 함수의 반환값을 사용하지 않아도 경고가 발생하지 않게 함
@discardableResult
func doSomething() -> Bool { return true }
6. @escaping
- 클로저가 함수의 실행이 끝난 후에도 실행될 수 있음을 명시
func request(completion: @escaping () -> Void) { }
7. @nonobjc
- Swift에서만 사용하고 Objective-C에서는 노출하지 않음
@nonobjc func swiftOnlyMethod() { }
8. @objcMembers
- 클래스 내 모든 멤버를 자동으로 @objc로 처리
@objcMembers
class MyClass: NSObject { }
9. @UIApplicationMain
- 앱의 진입점(옛날 방식, 현재는 @main 사용)
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate { }
10. @main
- Swift 5.3 이상에서 앱의 진입점 지정
@main
struct MyApp { ... }
11. @State, @Binding, @ObservedObject, @EnvironmentObject, @Published
- SwiftUI에서 상태 관리에 사용
@State var isOn: Bool = false
@Binding var value: Int
@ObservedObject var viewModel: MyViewModel
@EnvironmentObject var settings: Settings
@Published var name: String = ""
12. @frozen
- enum의 case가 더 이상 추가되지 않음을 명시 (라이브러리 배포 시)
@frozen enum MyEnum { ... }
13. @inlinable
- 다른 모듈에서 인라인 최적화 허용
@inlinable public func fastFunc() { }
14. @testable
- 테스트 타겟에서 모듈의 internal 멤버에 접근 가능
@testable import MyApp
15. @propertyWrapper
- 커스텀 프로퍼티 래퍼 정의
@propertyWrapper
struct MyWrapper { ... }
16. @autoclosure
- 인자를 자동으로 클로저로 감싸서 전달
func log(_ message: @autoclosure () -> String) { }
17. @resultBuilder
- DSL(도메인 특화 언어) 문법 지원 (ex. SwiftUI의 ViewBuilder)
@resultBuilder
struct MyBuilder { ... }
기타 자주 쓰이는 어노테이션
- @NSCopying
- @GKInspectable
- @NSManaged
- @UIApplicationDelegateAdaptor (SwiftUI에서 AppDelegate 연결)
- @Sendable (동시성 관련)
스토리보드 붙일 때 @IBOutlet/@IBAction, 셀렉터·노티는 @objc, SwiftUI 상태는 @State/@Binding/@Published 정도만 손에 익히면 되고, 나머지는 문서에서 @ 보고 찾아오면 된다.
참고: Swift Attributes