← 글 목록

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