[Swift] @main κ³Ό 컀μ€ν μνΈλ¦¬ ν¬μΈνΈ
1μ°¨ μμ : 21.09.28
μλ νμΈμ πΆ
μ΄λ² μκ°μλ @main νΉμ± (attribute) μ λν΄μ μμλ³΄κ² μ΅λλ€.
κ·ΈλΌ μμν΄λ³Όκ²μπ₯
A more general purpose and lightweight mechanism for delegating a program’s entry point to a designated type.
@main μ κΈ°λ₯
@main μ μ€μννΈ 5.3λ²μ μμ ꡬνλ λ²μ©μ μΈ μλ‘μ΄ μνΈλ¦¬ ν¬μΈνΈ μ 곡 κΈ°λ₯μ λλ€.
μ΄μ μλ μ± κ°λ°μ© νλ‘κ·Έλ¨μ μν΄μλ @UIApplicationMain μ΄λΌλ μ΄νΈλ¦¬λ·°νΈλ‘ μνΈλ¦¬ν¬μΈνΈλ₯Ό μ§μ νμ΅λλ€.
@main μ΄ λ²μ©μ μΈ μ΄μ λ
λ¨μΌ νμΌ μ½λμ΄λ νλ μμν¬ νλ‘μ μ΄λ 컀μ€ν λΌμ΄λΈλ¬λ¦¬λ μκ΄μμ΄ λμΌνκ² μνΈλ¦¬ν¬μΈνΈλ₯Ό μ 곡ν΄μ€ μ μκΈ° λλ¬Έμ λλ€.
μ€μννΈ μ»΄νμΌλ¬λ @main μ΄ μ ν [μ±κΈ λ Ό μ λ€λ¦ νμ ] νΉμ [main.swift νμΌ]μ μνΈλ¦¬ν¬μΈνΈλ‘ μΈμ§ν©λλ€.κ·Όκ±°
λ§μ½ @main μ μꡬμ¬νμ μΆ©μ‘±μν¨ νμ μ΄λΌλ©΄,
μνλ νμ μμ @main μ μ μ΄μ£Όλ κ²λ§μΌλ‘ μνΈλ¦¬ ν¬μΈνΈλ₯Ό μ§μ ν μ μμ΅λλ€.
μꡬμ¬νμ μ‘°κΈ λ€μ μ΄ν΄λ³΄κ² μ΅λλ€.
μνΈλ¦¬ ν¬μΈνΈλ νλ‘κ·Έλ¨μ μμ μ§μ μ μλ―Έν©λλ€.
μ΄ κ°λ μ λ¨μΌ νμΌ κΈ°λ°μ μ μ°¨μ μ½λ λ₯Ό μμ± ν λλ μμ§ λͺ»ν΄λ ν° μκ΄μ΄ μμμ΅λλ€.
λ¨μΌ νμΌ κΈ°λ°μμλ μμμλΆν° μλλ‘ μ°¨λ‘λλ‘ μ€νλλκΉμ!
" top-down lexical order "
λ¨μΌ νμΌ κΈ°λ°μ μ μ°¨μ μ½λμ κ°μ₯ κ°κΉμ΄ μλ Playgrounds νμΌλ€ μ λλ€.
νμΌ νλ μμ²΄κ° νλ‘κ·Έλ¨μ λ¨μμ΄λ©°, λ€λ₯Έ νμΌμ μν₯μ λ°μ§ μμ΅λλ€.
νμ§λ§ UIKit κ³Ό κ°μ νλ μμν¬ κΈ°λ° νλ‘κ·Έλ¨μ λ€λ¦ λλ€.
μ°λ¦¬λ μ§κΈκΉμ§ νμΌμ νμ κ³Ό κ·Έ λ©€λ²λ€λ§ 'μ μΈ' νμ λΏ, μΈμ μ΄λ»κ² μ€νμν€λ μ§λ μ ν μ μ§ μμμ΅λλ€.
AppDelegate: " λ΄κ° μμμ ν΄μ€κ² "
μμΌκΉμ? λ°λ‘ μ€μ ν΄μ£Όμ§ μλλ€λ©΄, νλ μμν¬κ° μμμ μ²λ¦¬ν΄μ£ΌκΈ° λλ¬Έμ λλ€.
κΈ°λ³Έμ μΌλ‘ AppDelegate μ΄ κ·Έ μν μ νκΈ° μν μνΈλ¦¬ν¬μΈνΈ νμ μΌλ‘ μ§μ λμ΄ μμ΅λλ€.
@main μ μμ μμ±νμ¬ μνΈλ¦¬ν¬μΈνΈκ° λ νμ μ λ€μκ³Ό κ°μ λ©μλλ₯Ό ꡬνν΄μΌν©λλ€.
'<TYPE>' is annotated with @main and must provide
a main static function of type () -> Void or () throws -> Void.
μ°λ¦¬κ° λ§λ νλ‘μ νΈμμλ κΈ°λ³Έ μ 곡λλ main() μ λ³Ό μ μμ£ . UIKit νλ μμν¬ λ΄λΆμ μ¨μ΄μκΈ° λλ¬Έμ λλ€.
AppDelegate λ νλ‘ν μ½ νμ₯μ ν΅ν κΈ°λ³Έ ꡬν μΌλ‘ static func main() μ μ 곡ν©λλ€.
>> κ΄λ ¨ κΈ: νλ‘ν μ½ μ΄μ 리 <<
μμ€ν μ μ±μ μ€νμν€κΈ° μν΄μ main() μ νΈμΆν©λλ€.
μ΄ μ€νν± ν¨μ main() μ΄ μ΄λ€ λ΄μ©μ μννλμ§λ 곡μλ¬Έμμ λμμμ΅λλ€.
κ·Έλ¦¬κ³ μ λΈλ‘κ·Έ κΈ <About App Luanching Sequence> μλ μ νμλ΅λλ€!βπ»
μνΈλ¦¬ν¬μΈνΈλ₯Ό μ§μ μ§μ ν΄λ³΄μ
μλ¬΄νΌ μ°λ¦¬λ a main static function of type () -> Void or () throws -> Void λ§ μ μΈν΄μ£Όλ©΄
κ·Έ νμ μ νλ‘κ·Έλ¨μ μνΈλ¦¬ν¬μΈνΈλ‘ μ€μ ν μ μμ΅λλ€.
μ λ κΈ°μ‘΄μ AppDelegate μ μνΈλ¦¬ν¬μΈνΈ λμ ,
μλ‘μ΄ μνΈλ¦¬ν¬μΈνΈλ‘ μ¬μ©ν μμμ Starter νμ μ μ§μ ν΄λ³΄μμ΅λλ€.
μ΄ μ±μ μ€νν΄λ³΄λ©΄ μ΄λ€ κ²°κ³Όκ° λνλ κΉμ?
μ΄μ AppDelegateμ main() μ λ μ΄μ μ€νλμ§ μμ΅λλ€.
κ·Έ λμ Starter μ main() μ΄ μ± μ€ν μ΅μ΄μ μ€νλλ λ©μλκ° λ©λλ€.
κ·Έλ¦¬κ³ μ΄ λ©μλλ "Hi" λ₯Ό μΆλ ₯νκ³ λ°ννκΈ°λ‘ λμ΄μμ΅λλ€.
μ€μ λ‘ μ±μ μ€νν΄λ³΄λ©΄, μ½μμ Hi λ§ μΆλ ₯λκ³ μ±μ μ’ λ£λ©λλ€.
κΈ°μ‘΄μ AppDelegate μ main μ΄ μννλ UIApplicaion κ°μ²΄ λ§λ€κΈ°, runLoop λ리기 λ±μ μΌλ ¨μ μμ μ νμ§ μκΈ° λλ¬Έμ λλ€.
μ΄λ° μμ μ ꡬνν μ½λλ₯Ό λ¬Έμμμλ 'boot-loading' code λΌκ³ μΈκΈνκ³ μμ΅λλ€. (OS μμ λ΄€λλ°)
λ°λΌμ λ¨μΌ μ± νλ‘μ νΈμμ 컀μ€ν μνΈλ¦¬ν¬μΈνΈλ₯Ό μ€μ νλ κ²μ μλΉν μ΄λ €μ΄ μμ μΌ κ²μΌλ‘ μΆμΈ‘λ©λλ€.
νμ§λ§ μ κΈμ @main μ μ΄ν΄νλ λ°μλ μ’μ μμμΈ κ² κ°μ΅λλ€.
μ€λλ λλ μ±μ₯νλ€!!!!!!βπ»
μ°Έκ³ μλ£
github.com/apple/swift-evolution/blob/master/proposals/0281-main-attribute.md
https://developer.apple.com/swift/blog/?id=7