์์ผ๋ก ์งํํ ๊ธ์์๋, Library์ Framework์ ๋ํด์ ์์๋ณผ ๊ฒ์ด๋ค. ์ฒซ๋ฒ์งธ ์์๋ก๋ Library์ด๋ค.
Library & Framework
์ผ๋จ ๊ฐ๋จํ๊ฒ Library์ Framework์ ๋ํ ์ฐจ์ด๋ฅผ ์์๋ณด๊ณ ๊ฐ์.
- Library: Linkable binary
- ๋ค๋ฅธ ํ๋ก๊ทธ๋จ๊ณผ linkํ์ฌ ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋ ํด๋์ค, ํจ์์ ์งํฉ
- ๋ณดํต ์์ค์ฝ๋๋ก ์ปดํ์ผ๋ ๋ชฉ์ ํ์ผ์ ๋ฌถ์
- ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ง ๊ฐ์ง๊ณ ์๋ค.
- ์ ํ๋ก์ ํธ๋ฅผ ์คํํ ๋, 22.04๊ธฐ์ค
Library
๋ฅผ ํด๋ฆญํ๋ฉด ๋ง๋ค ์ ์๋ค.
- Framework: Library + Resource
- ๊ณ์ธตํ๋ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์์, ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด package๋ก ๋ด๊ฒจ์๋ ๊ฒ์ ๋งํ๋ค.
- library
- nib file
- image file
- localized string
- header files
- reference documentation
- ์์ฒด๊ฐ bundle์ด๋ค. NSBundle class๋ก ์ปจํ ์ธ ์ ์ ๊ทผ์ด ๊ฐ๋ฅ, Swift์์๋ Bundle class๋ก ์ ๊ทผํ ์ ์์
- ์ ์ ๋๋ ๋์ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ ๋ชฉ์ ์ผ๋ก ์ ๊ณต๋๋ค.
- ์ฆ, ์ฑ์์ ํน์ ์์ ์ ์ํํ๊ธฐ ์ํด ํธ์ถํ ์ ์๋ ๋ฃจํด์ ์ ๊ณตํ๋ค.
- ๊ณง, ํ๋ ์ ์ํฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ ์ฉ๋๋ก ์ฌ์ฉ๋๋๋ฐ, ์ฌ๋ฌ ๋ฆฌ์์ค ํ์ผ์ ํจ๊ป ๋ด๊ณ ์๊ณ , ๊ทธ ๋ฆฌ์์ค ์ ๊ทผํ๊ธฐ ์ํด Bundle ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ์ ํ๋ก์ ํธ๋ฅผ ์คํํ ๋, 22.04๊ธฐ์ค
Framework
๋ฅผ ํด๋ฆญํ๋ฉด ๋ง๋ค ์ ์๋ค.
- ๊ณ์ธตํ๋ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์์, ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด package๋ก ๋ด๊ฒจ์๋ ๊ฒ์ ๋งํ๋ค.
์ฌ๊ธฐ์ ์ ์ ์๋ ์ ์, ๊ฐ๋ ์ ์ผ๋ก Framework๊ฐ library๋ฅผ ํฌํจํ๋ค๋ ์ฌ์ค์ด๋ค.
Static Library
Static library๋ ์์นด์ด๋น๋ object file(.o
ํ์ฅ์)์ ๋ชจ์์ผ๋ก .a
ํ์ฅ์ ํํ๋ฅผ ๊ฐ์ง๋ค. Static library๋ Static archive library, static linked shared library๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
macOS/iOS ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ฉด object files๋ฅผ ์์ฑํ๋ค. object file์ Mach-O ํ์์ binary ๋ฐ์ดํฐ๋ก ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ํฌํจํ๋ค. Mach-O๋ ์คํ ํ์ผ ํฌ๋งท์ ์ผ์ข ์ด๋ค. ํด๋น ๋ด์ฉ์ ๋ค์ ๊ธ๋ก ์์๋ณด๋๋ก ํ๊ฒ ๋ค. ์ง๊ธ์ ํ์ผ์ ๊ตฌ์ฑ๋ง ๊ฐ๋จํ๊ฒ ์์๋ณด์.
- Header: ํด๋น ํ์ผ์ด ๋์ํ๋ CPU Architecture ์ ๋ณด๋ฅผ ๋ช ์ํ๋ค.
- Load Commands: ํ์ผ์ ๋ ผ๋ฆฌ์ ํ๋ฆ์ ๋ํ ์ ๋ณด๋ฅผ ๋ช ์
- Raw Segment Data: Raw code์ Data
์ฐ๋ฆฌ๊ฐ ์ค์ ๋ก ์ฑ์ ๋น๋ํ ํ, ์ฑ ๋ฒ๋ค ๊ฒฝ๋ก๋ก ์ฐพ์๊ฐ์ โํจํค๊ธฐ ์ ๋ณด ๋ณด๊ธฐโ๋ฅผ ํตํด ์ด์ด๋ณด๋ฉด ํ๋ก์ ํธ ์ด๋ฆ๊ณผ ๊ฐ์ ์คํํ์ผ์ด ์๋ค.
ํ์ผ ์์ฑ์ ์ณ๋ณด๋ฉด, Mach-O ํ์ผ์ด๋ผ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋์ ๊ณผ์
์์ ๊ทธ๋ฆผ์์ ์ฌ์ฉํ๋ ์ฉ์ด๋ฅผ ๋ฐํ์ผ๋ก ์ค๋ช ํด๋ณด์๋ค.
- ์ฑ์ ๋น๋ํ๊ฒ ๋๋ฉด..
- source file์ด ์ปดํ์ผ๋์ด Static linker๋ก ๋ค์ด๊ฐ
- ์ด ๋ app์ executable file๋ก ๋ณต์ฌ๋๋ค.
- ์ฑ์ ์คํํ๊ฒ ๋๋ฉด..
- library๊ฐ executable file์ ๋ณต์ฌ๋์๊ธฐ ๋๋ฌธ์ ๋ฐํ์์ ๋ฉ๋ชจ๋ฆฌ์ ํญ์ ๋ก๋๋๋ค.
์ฅ๋จ์
์ฅ์ | ๋จ์ |
---|---|
- ์ฑ์ ์ฃผ์ ๊ณต๊ฐ์ ํญ์ ๋ก๋๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋ ์คํ์๋๊ฐ ๋งค์ฐ ๋น ๋ฆ | - ์ฑ์ executble file์ ํญ์ ํฌํจ๋์ด์ผ ํจ - ์ด๊ธฐ ๋ฐ์นญ ์๋ ์ ํ - ์ฑ์ ์ด๊ธฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ฆ๊ฐ - library์ ๋ฒ์ ์ ๋ฐ์ดํธ์ ์ฑ์ object files๋ฅผ ์๋ก์ด ๋ฒ์ ์ library๋ก ๋ณ๊ฒฝํด์ผ ํจ. ์ฆ, ์๋ก ๋น๋๋์ด์ผ ์ ๋ฐ์ดํธ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ๊ฐ๋ฅ |
Dynamic Library
static library๊ฐ compile time์ executable file์ ํฌํจ๋๋ค๋ ์ ์ ์ฑ์ด ์ปค์ง ์๋ก ๋ ํฐ ๋ฌธ์ ๋ก ์์ฉํ๋ค. ๋ณต์ก๋๊ฐ ๋์ด๋ ์ถ๊ฐ์ ์ธ ์์
์ด ๋ง์ด ์๊ตฌ๋์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์จ ๊ฒ์ด Dynamic library์ด๋ค. ํต์ฌ์ executable files์ ํฌํจ๋์ง ์๋๋ค๋ ์ ์ด๋ค. ์ฆ, Dynamic library๋ compile๊ณผ ๋
๋ฆฝ์ ์ผ๋ก ๋์ํ๋ฉฐ, ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ compile ์์ด dynamic library์ ์ฝ๋๋ ๋ณ๊ฒฝ๋ ์ ์๋ค. ์ด๋ฐ ์์ฑ ๋๋ฌธ์ dynamic shared libraries, shared objects, dynamically linked libraries๋ผ ๋ถ๋ฆฐ๋ค. (dll
, sodll
)
๋์ ๊ณผ์
- ์ฑ์ ๋น๋ํ๊ฒ ๋๋ฉด..
- source file์ด compile๋๋ค.
- ์ปดํ์ผ๋ ํ์ผ์์ ํ์๋กํ๋ library๋ฅผ linkํ๋ค.
- ์ด ๋งํฌ๊ณผ์ ์์ executable file์ด ํ์๋ก ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฃผ์๋ฅผ Dynamic linker๊ฐ ์ ๊ณตํ๋ค.
- ์ฑ์ ์คํํ๊ฒ ๋๋ฉด..
- ํ์ํ ์์ ์ ์ฃผ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ก๋ํ๋ค.
์ฅ๋จ์
์ฅ์ | ๋จ์ |
---|---|
- ์ฑ์ compile๊ณผ ๋ณ๊ฐ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ compile์์ด library์ ๋ณํ๋ ์ฝ๋ ๋ฐ์๊ฐ๋ฅ - ๋ถํ์ํ๋ค๋ฉด memory์ ๋ก๋๋์ง ์์ - ์ก ์ด๊ธฐ ์คํ ์๋ ๊ฐ์ - ์ฑ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ฐ์ | - ๋ฐํ์ ์ฑ ์คํ ์๋ ๊ฐ์ - Library ์ฌ์ฉํ ์ ์๊ฑฐ๋, ์ฌ์ฉ์ ๊ฐ๋ฅํ๋ ๋ฒ์ ํธํ๋์ง ์๋ ๊ฒฝ์ฐ ์ฑ์ด ์ฃฝ์ ์ ์๋ค. |
Xcode์์ ์ฐพ์๋ณด๊ธฐ
Link Binary with libraries
Xcode > Build Phase > Link Binary With Libraries
link ํด์ผํ ๋ชจ๋ libraries, Frameworks(๋ค์๊ธ)๋ฅผ ์ ๋๋ค.
Embed Frameworks
Xcode > Build Phase > Embed Frameworks
App Bundle์ ๋ฌถ์ฌ์ Copy ๋์ด์ผ ํ Frameworks๋ฅผ ์ ๋๋ค.
๋น๋๊ฐ ์๋ฃ๋๋ค๋ฉด products ํด๋์ ์๊ธฐ๋๋ฐ, ํด๋น ๋ฒ๋ค์ package ํด๋๋ฅผ ์ด์ด๋ณด๋ฉด, frameworks ํด๋๊ฐ ์๊ณ , ์ด ์์ dynamic framework๋ก ๊ตฌ์ฑํด๋ ํ๊ฒ์ ์คํํ์ผ์ด ์์นํด ์๋ค. pod์ผ๋ก ์ค์ ํ ๊ฒ๋ค์ pod project์ ์์นํด์๋ค.
์ ๋ฆฌ
Static | Dynamic (shared) | |
---|---|---|
์ฌ์ฉ ๊ฐ๋ฅ ํ์ด๋ฐ | Build time ์ดํ ๊ณง๋ฐ๋ก ๊ฐ๋ฅ (application์ ๋ชจ๋ ๋ฐ์๋จ) | Run tim์ ๋ฉ๋ชจ๋ฆฌ ์ฌ๋ฆฐ ํ ๊ฐ๋ฅ (App Launch Time) |
binary ํ์ฅ์ | .a | .dylib (Framework์ธ ๊ฒฝ์ฐ ํน๋ณํ ํ์ฅ์ ์์) |
target file ํฌ๊ธฐ | target size ์ฆ๊ฐ ์ฌ์ฉํ๋ ์คํํ์ผ ๊ฐ๊ฐ์ ์ปดํ์ผ๋์ด ์ถ๊ฐ๋จ | target size ๋ณ๋ ์์ |
๊ณต์ ๊ฐ๋ฅ ์ฌ๋ถ | ๋ถ๊ฐ๋ฅ | ์ฌ๋ฌ ํ๋ก์ธ์ค์์ ์ฌ์ฉ ๊ฐ๋ฅ (์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์ ๋ถ๊ฐ๋ฅ, sandbox๋ด์ ๋ค์ด๊ฐ ์์ด ๋ณด์์ ์ผ๋ก ๋งํ์์, ๋์ app extension์์ ์ฌ์ฉ๊ฐ๋ฅ) |
iOS ์ฑ ํฌ๊ธฐ | ์ต์ (๋ค ์ปค์ง ์๋ ์์) ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌ๊ธฐ ๋งํผ ์ฆ๊ฐ | ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌ๊ธฐ ๋งํผ๋ง ์ฆ๊ฐ ์ฑ ํจํค์ง์ embed ๋์ด ์ฌ์ฉ๋๋ฏ๋ก) |
์ฒ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์์ ๋ ๋ณด์ด๋ New target ์ค์ ์ Framework๋ dynamic ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ผ๊ธฐ ํ๋ค. iOS 8.0๋ถํฐ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. static library๋ ์ฌ์ ํ ์ผ๋ฐ์ ์ผ๋ก ๋งํ๋ static library์ด๋ผ ๋งํ๋ค.