샘성의 iOS 개발 일지

@main에 대해서 설명하시오. 본문

iOS/면접

@main에 대해서 설명하시오.

SamusesApple 2023. 6. 1. 12:40
728x90

참고 문서: 

 

GitHub - apple/swift-evolution: This maintains proposals for changes and user-visible enhancements to the Swift Programming Lang

This maintains proposals for changes and user-visible enhancements to the Swift Programming Language. - GitHub - apple/swift-evolution: This maintains proposals for changes and user-visible enhance...

github.com

 

 

 

@main 이란?

  @main은 Swift 5.3부터 Implement 된 어트리뷰트로, 프로그램의 시작점을 알려주는 역할을 한다.

 

  Swift 컴파일러는 @main 주석이 달린 유형을 프로그램의 시작점으로 인식한다. @main으로 표시된 틀에는 static main() 메서드를 선언한다는 암묵적 요건이 하나 있다. 이 main() 메서드는 일반적으로 라이브러리 또는 프레임워크에 의해 제공된다. 따라서 Swift 프로그램 작성자는 @main 속성을 사용하여 올바른 시작점을 나타내기만 하면 된다.

 

 

 

 

+) @main 이 Implemented 된 계기 

 해석 (틀린점 있으면 꼭 말씀 부탁드립니다):

 

  Swift 프로그램은 파일의 시작점부터 실행된다. 이러한 실행 방식은 프로시저 코드(로직 처리만 하고 결과값 반환 안하는 코드)에는 효율적으로 작동하고 프로그램도 간단하게 만들며 구문도 필요없게 한다는 면에서 효과적이다.

 

  하지만 이러한 모델에 모든 프로그램이 걸맞게 작동하는 것은 아니다. UIKit, AppKit과 같은 유저 인터페이스 프레임워크는 앱이 설치되는 복잡한 과정을 처리하고 앱이 어떻게 작동할 것인지 정의하기 위한 고성능의 API hook를 제공한다.

  UIKit과 AppKit 프레임워크를 사용하는 개발자들 중 대부분은 앱 실행이 실행되는 시작점에 대해서는 신경 쓰지 않으며 조작도 하지 않는다.

 

  이러한 두 모델(UIKit, AppKit)의 경우를 해결하기 위해, 앱은 프레임워크가 선호하는 실행 시점을 알려줄 작은 'boot-loading'코드가 필요하다. Swift는 출시 이래로 UIKit과 AppKit 프레임워크를 사용한 앱의 시작 과정을 편리하게 다루기 위해 도메인 특화 어트리뷰트인 @UIApplicationMain과 @NSApplicationMain을 제공해왔다.

 

  하드 코딩된 프레임워크 고유 어트리뷰트(@UIApplicationMain, @NSApplicationMain) 대신, Swift가 프로그램의 시작점을 지정된 타입에게 맡기는 더 보편화되고 가벼운 메커니즘을 제공하는 것이 이상적이다. 프로그램을 시작하기 위한 타입 기반 접근은 타입 시스템을 통해 문제를 해결하는 Swift의 일반적인 문제 해결 패턴에 적합하며 프레임워크가 표준 언어 기능을 사용하여 깨끗하고 간단한 엔트리 포인트 API를 제공할 수 있도록 한다.

 

 

 

 

 

 

요약

1. Swift 5.3 이전 - 하드 코딩된 프레임워크 고유 어트리뷰트인 @UIApplictaionMain(UIKit), @NSApplicationMain(AppKit)으로 프로그램의 시작을 다뤄옴.

 

2. 하지만 UIKit과 AppKit 전용 어트리뷰트를 사용하지 않고 더 보편화되고 가벼운 메커니즘으로 간단한 앱의 시작점을 알리는 것이 더 Swift고 효율적이다 판단

 

3. Swift 5.3 - @main 도입 _ SwiftUI가 struct형태로 되어있기 때문에

 

4. 이제부터 Swift 컴파일러는 @main 주석이 달린 유형을 프로그램의 시작점으로 인식함.

 

5. @main 안에는 사실 main() 이라는 static 함수가 존재하는데 프레임워크에서 알아서 제공하므로 개발자는 앱 시작점에 @main만 잘 작성하면 됨

 

 

 

 

 

 

 

 

작성자가 직접 해석하고 정리한 내용이라 오역이 있을 수 있습니다. 잘못된 점이 있다면 꼭 댓글로 말씀해주시면 감사하겠습니다!

728x90