๊ฒ์์ ํตํด ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ๋ฐ๋ผ์ ๋ถ์ ํํ ์๋ ์๊ณ ์ถํ ์ถ๊ฐ ๊ณต๋ถ๋ฅผ ํตํด ๋ด์ฉ์ด ๋ณ๊ฒฝ๋ ์๋ ์์ต๋๋ค.
Serialization์ด๋?
Serializtion์ ๋ฒ์ญํ๋ฉด '์ง๋ ฌํ'์ด๋ค. ์ง๋ ฌํ๋ ๊ฐ๋จํ๊ฒ ๋งํ์๋ฉด ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํํ๋ก ๋ณํํ๋ ๊ฒ์ ๋งํ๋ค. ์ด ํํ๊ฐ ์ง๋ ฌ์ (์๊ฐ ์์ฐจ์ )์ด๋ผ ์ง๋ ฌํํ๋ค๊ณ ํํํ๋ค.
์กฐ๊ธ ๋ ๊ธธ๊ฒ ์ค๋ช ํ์๋ฉด ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋๋ ๊ฐ์ฒด์ ์ํ๋ฅผ ์ถํ์ ์ ์ฅ๋ ์ ์๊ฑฐ๋ ์ ์ก๋ ์ ์๋, ๋๋ ์ฌ๊ตฌ์ฑ๋ ์ ์๋ ํ์์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ด๋ค. ์ด์ ๋ฐ๋๋๋ ๊ฐ๋ ์ Deserialization์ด๋ค. ๋ฒ์ญํ๋ฉด '์ญ์ง๋ ฌํ'๋ก, ์ด๋ ํ ํํ๋ก ๋ณํ๋ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ํํ๋ก ๋ณํํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
Serialization์ ์์๋ฅผ ๋ณด๋ฉด ์กฐ๊ธ ๋ ์๋ฟ๋๋ค. ์ฑ ๊ฐ๋ฐ ์ ์์ฃผ ์ ํ๋ JSON์ ์ฌ์ฉํ ๋คํธ์ํฌ ํต์ ์ ์๊ฐํด๋ณด์. ์๋ฒ์์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ ์ฃผ๋ก JSON ํํ๋ก, iOS ๊ฐ๋ฐ์๊ฐ ๋ฐ๋ก ์ฌ์ฉํ ์๋ ์๋ ํ์ ์ด๋ค. ๊ทธ๋์ ๋ณดํต decoding์ ํตํด ๋ค๋ฅธ ํ์ ์ผ๋ก ๋ณ๊ฒฝํ๋ค. ๋ํ ์๋ฒ๋ก ๊ฐ์ ๋ณด๋ผ ๋๋ encoding์ ํ์ฌ JSON ํํ๋ก ๋ณํํ๋ค. ์ด ๊ณผ์ ์ด ๋ฐ๋ก serialization๊ณผ deserialization์ด๋ค.
serializarion ์ฌ์ฉ
- ์ ์ ์ ํตํ ๋ฐ์ดํฐ ์ ์ก(๋คํธ์ํฌ ํต์ )
- ๋ฐ์ดํฐ ์ ์ฅ
- ์๊ฒฉ ์ ์ฐจ ํธ์ถ (RPC)
JSON, XML, protobuf, YAML, BSON, MessagePack์ ๋ฐ์ดํฐ serialization์ ์์์ด๋ค. ๊ทธ ์ค JSON๊ณผ XML์ ๋ง์ด ์ฌ์ฉํ๋๋ฐ, JSON์ ์ ์ ํฌ๊ธฐ์ ์ข์ ๊ฐ๋ ์ฑ์ผ๋ก ๊ฐ์ฅ ์ ํธ๋๋ค.
๋ฉ๋ชจ๋ฆฌ
Serializarion๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ๋ํด ๊ณต๋ถํด์ผํ๋ค. (Value Types and Reference Types in Swift ์ฐธ๊ณ )
๋ฉ๋ชจ๋ฆฌ๋ ์๊ฐ ์์๋๋ก ์ ๋ ฌ๋์ด ์๋ byte๋ค์ ๊ธด ๋ชฉ๋ก์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ byte๋ ์์ ์ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ทธ ๊ฐ๊ฐ์ ์ฃผ์ ๋ฒ์๋ address space๋ผ๊ณ ๋ถ๋ฅธ๋ค. iOS ์ฑ์ address space๋ text, data, stack, heap์ด๋ผ๋ 4๊ฐ์ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
Text Segment์ ์ฑ์ ์คํ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ํ์ฑํ๋ ๊ธฐ๊ณ์ด ๋ช ๋ น์ ํฌํจํ๋ค. ๊ธฐ๊ณ์ด ๋ช ๋ น์ ์ปดํ์ผ๋ฌ์ ์ํด Swift ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด ์ฝ๋๋ก ๋ฒ์ญํ๋ฉด์ ์์ฑ๋๋ค. ์ด Text ๋ถ๋ถ์ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๊ณ constant(๋ถ๋ณ)ํ ๊ณต๊ฐ์ ๊ฐ์ง๋ค.
Data Segment์ Swift์ static ๋ณ์์ constant ๊ทธ๋ฆฌ๊ณ type metadata๋ฅผ ์ ์ฅํ๋ค. ํ๋ก๊ทธ๋จ์ด ์์๋ ๋ Initial ๊ฐ์ ํ์๋ก ํ๋ ๋ชจ๋ global ๋ฐ์ดํฐ๋ ์ฌ๊ธฐ์ ํ ๋น๋๋ค.
Stack์ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ์ local ๋ณ์์ ๊ฐ์ ์ผ์์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ๋งค๋ฒ ์ฐ๋ฆฌ๊ฐ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋, ๋ฉ๋ชจ๋ฆฌ์ ์๋ก์ด ์กฐ๊ฐ์ด ์คํ์ ํ ๋น๋๋ค. ๋ฉ์๋๊ฐ ์ข ๋ฃ๋๋ฉด ์ด ๋ฉ๋ชจ๋ฆฌ๋ ํด์ ๋๋ค. ๋ช๋ช ์์ธ๋ฅผ ์ ์ธํ๊ณ , ๋ชจ๋ Swift ๊ฐ ํ์ ์ ์ฌ๊ธฐ์ ํ ๋น๋๋ค.
heap์ Lifetime์ด ์๋ ๊ฐ์ฒด๋ค์ ์ ์ฅํ๋ค. ๋ชจ๋ Swift ์ฐธ์กฐ ํ์ ๊ณผ ๋ช๋ช ์์ธ์ ์ธ ๊ฐ ํ์ ์ด ์ฌ๊ธฐ์ ํ ๋น๋๋ค.
๋ ์์ธํ ์ดํด๋ฅผ ์ํด์ heap๊ณผ stack์ ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถํ๋ ๊ฒ์ด ์ข๋ค.
์ ๋คํธ์ํฌ ํต์ ๊ณผ ๋ฐ์ดํฐ ์ ์ฅ์ ๊ผญ Serializarion์ ํด์ผํ๋๊ฐ?
์ฌ๊ธฐ์ '์ง๋ ฌํํ๋ค'๋ผ๋ ๋ง์ ์๋ฏธ๋ฅผ ์กฐ๊ธ ๋ ์ปดํจํฐ ๊ณตํ์ ์ผ๋ก ํ์ธํด๋ณด์. ์ฌ๊ธฐ์ ๊ณต๊ฐ์ ์ผ๋ก ๋์์ ์กด์ฌํ๋ ์ํ๋ ํ์ ํ ๋น๋์ด ์๋ ๋ฐ์ดํฐ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์คํ์ ์์ฌ์๋ ์ํ์ด๊ณ , ์ง๋ ฌํ๋ ์ํ๋ ์ง์ง ๋ฐ์ดํฐ๋ค์ด ์์ฐจ์ ์ผ๋ก ์คํ์ ์์ธ ์ํ์ด๋ค.
(์ ํํ์ง ์๊ณ ๊ณต๋ถ๊ฐ ๋ ํ์ํ ๋ด์ฉ์ ๋๋ค.)
๊ณต๊ฐ์ ์ผ๋ก ๋์์ ์กด์ฌํ๋ ์ํ๋ก ํํ๋์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ์ด๊ฒ์ ๋์ํ๋ ์ง๋ ฌ(์๋ฆฌ์ผ)์ธ ์ํ๋ก ์กด์ฌํ๋๋ก ๋ณํํ๋ค๋ผ๋ ์๋ฏธ๊ฐ ์๋ค.
์ด ๋ ์ํ๋ ์ ๊ทผ ์ ์ค์ํ ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ค. ์ด๋ ํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ค๊ณ ํ์ ์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ, ์ง์ง ๋ฐ์ดํฐ๊ฐ ์๋๋ ๋ฐ์ดํฐ ์ฃผ์๊ฐ ์๋๋. ์ง์ง ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ฌ ์ ์๊ฒ ์ง๋ง, ๋ฐ์ดํฐ ์ฃผ์๋ ์ฃผ์์ผ ๋ฟ์ด๋ค.
๋ฐ๋ผ์ ๋คํธ์ํฌ ํต์ ๊ณผ ๋ฐ์ดํฐ ์ ์ฅ์ ์ง์ง ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ค. ์ฆ ๊ฐ ํ์ ๋ฐ์ดํฐ(value type)๊ฐ ํ์ํ๋ค.
๊ฐ ํ์ (Value Type) ๋ฐ์ดํฐ Vs ์ฐธ์กฐ ํ์ (Reference Type) ๋ฐ์ดํฐ
๋ง์ ์ธ์ด์์ ๋ฐ์ดํฐ ํ์ ์ ๋ณดํต ๊ฐ ํ์ ๊ณผ ์ฐธ์กฐ ํ์ ์ผ๋ก ๋๋๋ค. Swift ๋ํ ๊ฐ๊ณผ ์ฐธ์กฐ ํ์ ์ผ๋ก ๋๋๋ค.
๊ฐ ํ์ value type
: struct, enum, collection( arrays, dictionaries, set ), standar( integers, floating-point numbers, Booleans, strings)
์ฐธ์กฐ ํ์ reference type
: class, function, closure
๊ฐ ํ์ ์ ๊ฐ ํ ๋น ์ ๋ณต์ฌ๋ ๊ฐ์ด ์ ๋ฌ๋์ด ์๋ณธ์ ์์ ํ ์ ์๋ค. ๋ฐ๋ฉด ์ฐธ์กฐ ํ์ ์ ๊ฐ ํ ๋น ์ ์ฐธ์กฐ, ์ฆ ์๋ณธ์ ์ฃผ์๊ฐ ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์ ์๋ณธ์ ์์ ํ ์ ์๋ค.
์์์ ๊ฒฐ๋ก
์ด๋ฌํ ํน์ง์ ๋ฐํ์ผ๋ก ๋ค์ ๋คํธ์ํฌ ํต์ ์ผ๋ก ๋์๊ฐ ๋ณด์. ๋ง์ฝ ์ฐธ์กฐ ํ์ ์ผ๋ก ๊ฐ์ ์ ๋ฌํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๊ฐ ์๋ ์ฃผ์๋ฅผ ์ ๋ฌํ๋ค๋ ์๋ฏธ์ธ๋ฐ, PC๋ง๋ค ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ฃผ์๋ฅผ ๋๊ฒจ์ค๋ ๊ทธ ์ฃผ์์๋ ํด๋น ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒ์ด๋ค.
๋ฐ์ดํฐ ์ ์ฅ์์๋ ์ ์ฌํ ์ผ์ด ๋ฐ์ํ๋ค. ๊ฐ์ฒด๋ฅผ ์์ฑํด ๋ฐ์ดํฐ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ธฐ๋กํด ๋๋ค๊ณ ํด๋ LifeTime์ด ๋๋๋ค๋ฉด ์์ฑํ ๊ฐ์ฒด๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋์ด ์ฌ๋ผ์ง๋ค. ๋ฐ๋ผ์ ์ฃผ์๋ฅผ ์๋๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ ๊ฒ์ด๋ค.
์ฆ ์ฐธ์กฐ ํ์ ์ ๋ฐ์ดํฐ๋ ๋ฌด์๋ฏธํ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค. ๋ฐ๋ผ์ ์ ์๋ฏธํ ๊ฐ ํ์ ๋ฐ์ดํฐ๋ก ๋ง๋ค๊ธฐ ์ํด Serializationํ์ฌ ์์ ์ ์งํํ๋ ๊ฒ์ด๋ค.
์ง๋ ฌํํ๋ค
Data serialization formats available in Swift
๋ฐ์ดํฐ ์ง๋ ฌํ(serialization)๋ ๋ฌด์์ด๊ณ ์ ํ์ํ๊ฐ?
์ง๋ ฌํ์ ์ญ์ง๋ ฌํ
๋ฉ๋ชจ๋ฆฌ ํ ๋น ์์น (struct, class, protocol, generic, closure)
Structures and Classes
Apple Blog: Value and Reference Types
Value Types and Reference Types in Swift
'Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ Swift ] print(_:separator:terminator:) (0) | 2023.10.04 |
---|---|
[ Swift ] ํ๋กํ ์ฝ ์งํฅ ํ๋ก๊ทธ๋๋ฐ (0) | 2023.09.24 |
[ Swift ] ์ต์ ๋ Optionals (0) | 2021.09.05 |
[ Swift ] ํจ์ (0) | 2021.09.02 |
[ Swift ] ํ๋ฆ ์ ์ด(2) - ๋ฐ๋ณต๋ฌธ ( for-in ๊ตฌ๋ฌธ, while ๊ตฌ๋ฌธ ) (0) | 2021.08.27 |