2021. 4. 1. 19:43ใ๐ง๐ป๐ป iOS ๊ฐ๋ฐ/iOS
iOS ํ๋ก์ ํธ๋ฅผ ์ฒ์ ์์ฑํ๋ฉด ์๋์ผ๋ก ์์ฑ๋๋ ๋ช ๊ฐ์ง ํ์ผ์ด ์์ฃ ? ๊ทธ ์ค์์ "AppDelegate.swift"๋ AppDegate ํด๋์ค๋ฅผ ์ ์ํ๊ณ ์ฑ์ด ์์๋๋ ์ง์ ์ ์ ์๋ ค์ฃผ๊ณ ์ฑ์ ์ ๋ ฅ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ ๋ฐ๋ฃจํ๋ฅผ ์์ฑํ๋ ์ญํ ์ ํฉ๋๋ค.
์ด AppDelegate์ ์ญํ ์ ์ดํดํ๋ ค๊ณ ๋ธ๋ก๊ทธ๊ธ์ ์ฐธ๊ณ ํ๋ ๊ณผ์ ์์ Swift๊ฐ 5.3๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธ ๋๋ฉด์ ํ๋ก๊ทธ๋จ์ entry point๋ฅผ ์๋ ค์ฃผ๋ ์์ฑ์ด @UIApplicationMain์์ @main์ผ๋ก ๋ณ๊ฒฝ๋ ๊ฒ์ ์๊ฒ๋์์ต๋๋ค. ํด๋น ์ฌํญ์ Xcode 12๋ถํฐ ์ ์ฉ์ด ๋์์ฃ !
๊ทธ๋์ ์ด๋ฒ ํฌ์คํ ์ ํตํด ํด๋น ๋ด์ฉ์ ๊ณต๋ถํ๋ฉด์ ๋ฐฐ์ด ๊ฒ๋ค์ ์ ๋ฆฌํด๋ณด๊ณ ์ ํฉ๋๋ค.
ํด๋น ๋ณ๊ฒฝ ์ฌํญ์ Apple์ swift-evolution ๋ ํฌ์งํ ๋ฆฌ์ 2020๋ 3์์ ์ฒ์ ์ ์๋์์ต๋๋ค.
์๊ฐ๊ธ์ ๋ณด์๋ฉด ํ๋ก๊ทธ๋จ ์คํ ์์ ์ ์ง์ ์ ์ผ๋ก ํ์ ์ ์ง์ ํ๊ธฐ ์ํ ์ค์ํํธ ์ธ์ด์ ๊ธฐ๋ฅ์ด๋ผ๊ณ ์ค๋ช ํฉ๋๋ค. ํ ๋ ๋ฒจ์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ ๋์ ์ฌ์ฉ์๋ single type์ @main ์์ฑ์ ์ฌ์ฉํ ์ ์๋ค๋๋ฐ์. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ๋ ํ๋กํ ์ฝ๊ณผ ํด๋์ค ์์์ ํตํด ์ฑ์ ์ง์ ์ ์ ์ปค์คํฐ๋ง์ด์งํ ์ ์๋ค๊ณ ํฉ๋๋ค. ์ด๊ฒ ๋ฌด์จ ๋ง์ผ๊น์?
๊ทธ๋ฌ๋ ค๋ฉด ๋จผ์ ํ ๋ ๋ฒจ ์ฝ๋์ ๋ํด์ ์ดํด๋ฅผ ํด๋ด์ผ๊ฒ ์ต๋๋ค.
์ค์ํํธ ๊ณต์๋ฌธ์์์๋ Swift ์์ค ํ์ผ์์์ ํ ๋ ๋ฒจ ์ฝ๋๋ 0๊ฐ ์ด์์ ์ ์ธ์ด๋ ์ ์ ๊ทธ๋ฆฌ๊ณ ํํ์์ผ๋ก ๊ตฌ์ฑ๋๋ค๊ณ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์์คํ์ผ์ ํ ๋ ๋ฒจ์์ ์ ์ธ๋ ๊ฒ๋ค์ ๊ฐ์ ๋ชจ๋๋ด์ ๋ชจ๋ ์์คํ์ผ์์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด์ฃ .
์ด ํ ๋ ๋ฒจ ์ฝ๋์๋ ๋ ๊ฐ์ง ์ข ๋ฅ๊ฐ ์๋ค๊ณ ํฉ๋๋ค. ํ ๋ ๋ฒจ ์ ์ธ(top-level declarations)๊ณผ ์คํ๊ฐ๋ฅํ ํ ๋ ๋ฒจ ์ฝ๋(excutable top-level code)์ธ๋ฐ์.
์ด ์ค ์๊ฐ๊ธ์์ ์๋ฏธํ๋ ํ ๋ ๋ฒจ ์ฝ๋๋ ์คํ๊ฐ๋ฅํ ํ ๋ ๋ฒจ ์ฝ๋๋ฅผ ์๋ฏธํฉ๋๋ค. ์ค์ง ํ๋ก๊ทธ๋จ์ ์ง์ ์ ์ผ๋ก์๋ง ํ์ฉ๋๋ต๋๋ค.
๊ทธ๋ฌ๋ ์ฒ์์ ์๋ฏธํ ํ ๋ ๋ฒจ ์ฝ๋๋ ๊ธฐ์กด์ ์ง์ ์ ์ ์๋ ค์ฃผ๋ @UIApplicationMain์์ฑ์ด์๋ค๋ ๊ฒ์ ์ ์ ์๊ฒ ์ฃ ?
@UIApplicationMain
Objective-C ๊ธฐ๋ฐ์ ํ๋ก์ ํธ์์๋ "main.m" ์์คํ์ผ์ ์๋ main()ํจ์๋ฅผ ์คํํ๋ฉฐ ํ๋ก๊ทธ๋จ์ด ์์๋๊ณ Swift๊ธฐ๋ฐ์ Xcode ํ๋ก์ ํธ์์ Mac ํ ํ๋ฆฟ์ ์์ฑํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก "main.swift" ํ์ผ์ ํฌํจํ์ฌ mainํจ์๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ Xcode์์ ์ iOS ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ ์ฑ์ด ์ด๋์ ๋ถํฐ ์์๋๋์ง ์๊ธฐ์ํด main() ํจ์ ํน์ "main.swift" ํ์ผ์ ์ฐพ์ ๋ณด๋ฉด, ์ฝ๊ฒ ์ฐพ์ ์๊ฐ ์์ต๋๋ค. ๊ทธ ์ด์ ๋ iOS ๊ธฐ๋ณธ ํ ํ๋ฆฟ์์ Swiftํ์ผ์ @UIApplicationMain์ ํฌํจํจ์ผ๋ก์ ์ปดํ์ผ๋ฌ๊ฐ iOS ์ฑ์ ์ง์ ์ ์ ํฉ์ฑํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก "main.swift"ํ์ผ์ด ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ ๋ค๊ณ main()ํจ์๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒ์ ์๋๋๋ค. Swift๊ธฐ๋ฐ์ iOSํ๋ก์ ํธ์์๋ UIKit ํ๋ ์์ํฌ๊ฐ ์ด๋ฅผ ์จ๊ฒจ์ ๊ด๋ฆฌํ๋ฏ๋ก ์ฐพ๊ธฐ ํ๋ค์๋ ๊ฒ์ด์ง์.
UIApplicationMain ํจ์
@UIApplicationMain์ UIApplicationMain ํจ์๋ฅผ ํธ์ถํ๊ณ ํด๋น ํด๋์ค์ ์ด๋ฆ์ ๋ธ๋ฆฌ๊ฒ์ดํธ ํด๋์ค์ ์ด๋ฆ์ผ๋ก ์ ๋ฌํฉ๋๋ค.
์ด ํจ์๋ ์ฑ ์คํ์์ ์ค์ํ ๋ช ๊ฐ์ง์ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
- ์ฑ์ ๋ณธ์ฒด์ ํด๋นํ๋ ๊ฐ์ฒด์ธ UIApplicaion๊ฐ์ฒด๋ฅผ ์์ฑ, ์ด ๊ฐ์ฒด๋ ์ฑ์ Life Cycle์ ๊ด๋ฆฌํฉ๋๋ค.
- ์ง์ ๋ ํด๋์ค(@UIApplicationMain์ด ํ์๋)์์ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ์ธ์คํด์คํ ํ๊ณ ์ด๋ฅผ ์ฑ์ ๊ฐ์ฒด์ ํ ๋นํฉ๋๋ค.
- ์ฑ์ Run Loop์ ํฌํจํ ๊ธฐ๋ณธ ์ด๋ฒคํธ์ฒ๋ฆฌ ๋ฃจํ๋ฅผ ์ค์ ํ๊ณ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ์์ํฉ๋๋ค.
- ์ฑ์ info.plist์ ๋ถ๋ฌ์ฌ main nibํ์ผ์ด ์ ๋๋ก ๋ช ์๋์ด์์ผ๋ฉด, ํด๋น nibํ์ผ์ ๋ถ๋ฌ์ต๋๋ค (์ ์ ์ธํฐํ์ด์ค๋ฅผ ๋ถ๋ฌ์ต๋๋ค.)
ํด๋น ํจ์๋ ๋ฐํํ์ ์ด Int32๋ก ๋ช ์๋์ด์์ง๋ง ๊ทธ ๊ฐ์ ๋ฐํํ์ง๋ ์์ต๋๋ค.
๊ทธ๋ผ @UIApplicationMain์ ์ญํ ๊ณผ ํจ์์ ๊ธฐ๋ฅ์ ๋ํด์ ์์๋ณด์์ผ๋ ์ @main์ ์ฌ์ฉํ๊ฒ ๋์๋์ง ์์๋ด ์๋ค.
@main
์ค์ํํธ ํ๋ก๊ทธ๋จ์ ์์คํ์ผ์ ์์์ ๋ถํฐ ์์ํ๊ณ ํน๋ณํ ๊ตฌ๋ฌธ์์ด ์ ์ฐจ์ ์ฝ๋์์ ํ๋ฃกํ๊ฒ ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ์์ฉ ์ฑ์ ๊ฒฝ์ฐ ์ข ๋ฃ ๋ ๋๊น์ง ๊ณ์ํด์ ์คํ๋๊ณ UIKit ๋ฐ AppKit๊ณผ ๊ฐ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ํ๋ ์ ์ํฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ๋ณต์ก์ฑ์ ์ฒ๋ฆฌํ์ฌ ์ฑ ๋์์ ์ ์ํ๊ธฐ์ํ ๊ณ ๊ธ API ํํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ํ๋ ์ ์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ ์ผ๋ฐ์ ์ผ๋ก ์ฑ ์คํ์ ๋ฌธ์ ๊ทธ๋๋ก ์์์ ์ ๋ํด ์ ๊ฒฝ ์ฐ๊ฑฐ๋ ์ํธ ์์ฉํ์ง ์์ต๋๋ค.
์ด ๋ ๋ชจ๋ธ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ฑ์ ํ๋ ์ ์ํฌ์ ๊ธฐ๋ณธ ์คํ ์์์ ์ ์์ํ๊ธฐ ์ํด ์๋์ "๋ถํ ๋ก๋ฉ" ์ฝ๋๊ฐ ํ์ํ๊ฒ๋์ฃ . ์ด๊ธฐ ๋ฆด๋ฆฌ์ค ์ดํ Swift๋ UIKit ๋ฐ AppKit ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ฅผ ์ํด ์ด ์์ ํ๋ก์ธ์ค๋ฅผ ์ํํ๊ฒ ์ํํ๊ธฐ ์ํด @UIApplicationMain ๋ฐ @NSApplicationMain ๋๋ฉ์ธ์ด ๋ช ์๋ ์์ฑ์ ์ ๊ณตํ์ต๋๋ค.
์ด๋ ๊ฒ (ํ๋ ์ฝ๋๋?) ํ๋ ์์ํฌ์ ์ฐ๊ฒฐ๋ ์์ฑ์ ์ฌ์ฉํ๊ธฐ ๋ณด๋ค ์ง์ ๋ ํ์ (@main์ผ๋ก ๋ช ์๋)์ ์ฌ์ฉํ์ฌ ๋ณด๋ค ๋ ์ผ๋ฐ์ ์ด๊ณ ๊ฐ๋ฒผ์ด ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ ๊ฒ์ด ๋ ์ด์์ ์ด๋ผ๊ณ ํฉ๋๋ค. ์ด๋ ์ค์ํํธ์ ํ์ ๊ธฐ๋ฐ์ ์์คํ ์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํจํด์ ๋ ์ ํฉํ๋ค๋ ๊ฒ์ด์ฃ . ๊ทธ๋ฆฌ๊ณ ํ๋ ์์ํฌ๊ฐ ํ์ค ์ธ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๊น๋ํ๊ณ ๊ฐ๋จํ ์ง์ ์ API๋ฅผ ์ ๊ณตํ ์ ์๊ฒ ํ๋ค๋๊ตฐ์.
๊ทธ๋ผ ์ด๋ป๊ฒ @main์ ์ฌ์ฉํ์ฌ Swift ์ปดํ์ผ๋ฌ์๊ฒ ํ๋ก๊ทธ๋จ์ ์ง์ ์ (entry point)์ ์๋ ค์ค ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
Swift ์ปดํ์ผ๋ฌ๋ @main์ด ๋ฌ๋ฆฐ ํ์ struct MyProgram์ ํ๋ก๊ทธ๋จ ์ง์ ์ ์ผ๋ก ์ธ์ํฉ๋๋ค. ์ด ํ์ ์ ์ ์ main()๋ฉ์๋๋ฅผ ์ ์ธํ๋ ํ๋์ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋ฉด ๋ฉ๋๋ค. ํ๋ก๊ทธ๋จ์ด ์์๋๋ฉด @main์ผ๋ก ํ์๋ ํ์ ์์ ์ ์ main ()๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค.
๊ทธ๋ผ ์ง์ iOS ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด ํ๋ก๊ทธ๋จ์ ์ง์ ์ ์ ์ง์ ๋ฐ๊ฟ๋ณด๊ฒ ์ต๋๋ค.
์ด๋ ๊ฒ AppDelegate๋ผ๋ ํ ์คํธ iOS ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ ์ฑ์ ์ง์ ์ ์ด ๋ EntryPoint ํ์ ๊ณผ ์ ์ main()ํจ์๋ฅผ ์์ฑํ EntryPointProtocol์ ๋ฐ๋ก Swift ํ์ผ๋ก ๋ง๋ค์ด ์ฃผ์์ต๋๋ค.
๋จผ์ AppDelegate.swift ํ์ผ์ ๋ณด๊ฒ ์ต๋๋ค.
์์์ ์ดํดํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ํด๋น ์ฝ๋๋ฅผ ํด์ํ์๋ฉด @main๋ก ํ์ํด์ค์ผ๋ก์ ํ๋ก๊ทธ๋จ์ ์ง์ ์ ์ AppDelegate ํด๋์ค์ด๊ณ UIApplicationDelegate ํ๋กํ ์ฝ์ ์์ฑ๋ ์ ์ main() ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋๋ค๋ ๊ฒ์ด์ฃ .
๊ทธ๋ผ ํ ์คํธ๋ฅผ ์ํด @main์์ฑ์ ์ฃผ์ ์ฒ๋ฆฌํ๊ณ ์ฑ ๋ฐ์นญ์ด ์๋ฃ๋ ๊ฒฝ์ฐ ์ถ๋ ฅ๋ print ๋ฌธ์ ์์ฑํด ๋๊ฒ ์ต๋๋ค..
๊ทธ๋ฆฌ๊ณ ์์ฑํ EntryPointProtocol์ ์ ์ main()ํจ์๋ฅผ ์์ฑํ๊ณ EntryPoint ํ์ ์ผ๋ก ํ๋ก๊ทธ๋จ ์ง์ ์ ์ ๋ฐ๊ฟ๋ณด๊ฒ ์ต๋๋ค.
EntryPointProtocol์ ์ ์ ๋ฉ์๋์ธ main()์ ์์ฑํ๊ณ EntryPoint์์ ํด๋น ํ๋กํ ์ฝ์ ์ฑํํ๊ณ main()๋ฉ์๋๋ฅผ ๊ตฌํํฉ๋๋ค.
EntryPoint ํ์ ์์ @main์์ฑ์ ๋ช ์ํจ์ผ๋ก์ ํ๋ก๊ทธ๋จ์ ์ง์ ์ ์ ํ์ํ๊ณ ์ฑํํ ํ๋กํ ์ฝ์ ํ์ ๋ฉ์๋๋ฅผ ์์ฑํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋น๋ ํ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์คํ๋๊ณ ์๋ฎฌ๋ ์ดํฐ์์ ์ฑ์ด ๋ฐ์นญ๋๋ ๊ฒ์ ํ์ธ ํ ์ ์์ต๋๋ค. AppDelegate์ mainํจ์๋ UIApplicationMain ํจ์๋ฅผ ํธ์ถํ๊ณ ์์ ์ ๋ฆฌํ ๊ธฐ๋ฅ๋ค์ด ์ํ๋๊ณ ๋์ ์ฑ์ด ์คํ๋๊ฒ๋ฉ๋๋ค.
๊ทธ๋ผ ๊ธฐ์กด์ @UIApplicationMain ์์ฑ์ ์ฌ์ฉํด๋ ๋ฌธ์ ๊ฐ ์์๊น์?
์ด๋ ๊ฒ ๊ธฐ์กด์ @UIApplicationMain์์ฑ์ ์ฌ์ฉํ๊ฒ๋๋ฉด class ์ ์ธ์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค๋ ์ค๋ฅ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
์ ๋ฆฌ
@UIApplicationMain๋์ @main์์ฑ์ ์ฌ์ฉํจ์ผ๋ก์ ํ์ ๊ธฐ๋ฐ์ ์ค์ํํธ ์ฝ๋์์ ์ด์์ ์ธ ํ๋ก๊ทธ๋จ ์ง์ ์ ์ ์๋ ค์ค ์ ์๊ณ main()ํจ์๋ ์ผ๋ฐ ์ ์ ๋ฉ์๋์ด๋ฏ๋ก ํ๋กํ ์ฝ์์ ํ์ฅ ๋ฉ์๋ ๋๋ ๊ธฐ๋ณธ ํด๋์ค๋ก ์ ๊ณต ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ๋ ์ ์ํฌ๋ ์ถ๊ฐ ์ธ์ด ๊ธฐ๋ฅ ์์ด๋ ์ฌ์ฉ์ ์ง์ ์ง์ ์ ๋์์ ์ฝ๊ฒ ์ ์ ํ ์ ์๊ฒ๋ฉ๋๋ค.
์ด๋ค UI ํ๋ ์์ํฌ์ด๋ ์๊ด์์ด ํน์ ํ ๋ชฉ์ ์ ์ํ ์์ฑ(UIKitd์ AppKit์ @UIApplicationMain ๋ฐ @NSApplicationMain)๋ณด๋ค @main์ ์ฌ์ฉํจ์ผ๋ก์ ์ผ๊ด์ฑ์ ์ถ๊ตฌํ๊ณ ๋์ฑ ๊ฐํธํ ์ง์ ์ ์ ์ ๊ณตํ๋ค๋ ๊ฒ์ผ๋ก ์ดํดํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๊ณต์๋ฌธ์์ ์์ด์๋ฃ๋ฅผ ํด์ํ๋ฉด์ ๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถํ์๊ธฐ์ ๋ถ์กฑํ ๋ถ๋ถ์ด ์์ ์ ์์ต๋๋ค.
์ค๋ฅ๊ฐ ์์ผ๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!
์ฐธ๊ณ ์๋ฃ
'๐ง๐ปโ๐ป iOS ๊ฐ๋ฐ > iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Design Pattern] MVC pattern (Model View Controller) (0) | 2021.01.14 |
---|---|
[DEV] Framework, Library , API :: ๊ฐ๋ ์ ๋ฆฌ (0) | 2021.01.12 |