Swift

[ Swift ] Serialization์ด๋ž€?

Forest Yun 2023. 1. 18. 14:52
728x90

๊ฒ€์ƒ‰์„ ํ†ตํ•ด ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ถ€์ •ํ™•ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์ถ”ํ›„ ์ถ”๊ฐ€ ๊ณต๋ถ€๋ฅผ ํ†ตํ•ด ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

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

 

728x90