๊ฐœ๋ฐœ๐Ÿ’ป/C#

[C#] ์ง๋ ฌํ™”&๋งˆ์ƒฌ๋ง

VIP 2023. 7. 1. 23:41
728x90
๋ฐ˜์‘ํ˜•

 

1. ์šฉ์–ด ์ •๋ฆฌ

  • Managed Code : .NET ๋˜๋Š” C# ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ƒ์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์˜๋ฏธ, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ค‘๊ฐ„ ์–ธ์–ด(Intermediate Language, IL)์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  CLR(Common Language Runtime) ํ™˜๊ฒฝ์—์„œ ๊ธฐ๊ณ„ ์–ธ์–ด ์ƒ์„ฑ
  • Unmanaged Code : ์ปดํŒŒ์ผ ํ•  ๋•Œ IL๊ณผ ๊ฐ™์€ ์ค‘๊ฐ„ ๊ณผ์ • ์—†์ด ๊ธฐ๊ณ„ ์–ธ์–ด ์ƒ์„ฑ (MFC, ATL, Win32 ๋“ฑ)
  • MBR : Marshal By Reference
  • MBV : Marshal By Value
  • Byte Stream : ๋Š์ž„์—†์ด ์—ฐ์†๋˜๋Š” ๋ฐ”์ดํŠธ ์—ด

Managed / Unmanaged Code ๋น„๊ต (์ถœ์ฒ˜ : ์ด๋ฏธ์ง€ ํด๋ฆญ)

 

2. ์ง๋ ฌํ™” (Serialization)

  • ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด๋ฅผ Byte Stream์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ์˜๋ฏธํ•˜๋ฉฐ ๊ฐ์ฒด์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ Stream์— ์“ฐ๊ธฐ ์œ„ํ•ด์„œ ์—ฐ์†์ (Serial)๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ
  • ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ฑฐ๋‚˜ Memory Buffer, Network๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์†ก/์ˆ˜์‹  ํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ
  • ์—ญ์ง๋ ฌํ™”(Deserialization) : Byte Stream์œผ๋กœ ๋ณ€ํ™˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์›๋ž˜์˜ ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…

 

3. ๋งˆ์ƒฌ๋ง (Marshalling)

  • ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ „์†กํ•  ๋ชฉ์ ์œผ๋กœ ํ‘œํ˜„๋ฐฉ์‹์„ ์ €์žฅ ๋˜ํ•œ ์ „์†ก์— ์ ํ•ฉํ•œ ๋ฐ์ดํ„ฐ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋ฉฐ ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ํ•„์š”์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ
  • Managed Dataํ˜•์„ Unmanaged Dataํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธ
  • ์ง๋ ฌํ™”์™€ ๋น„์Šทํ•œ ๊ฐœ๋…์ด์ง€๋งŒ ์ง๋ ฌํ™”๋Š” Byte Stream์œผ๋กœ ๋ณ€ํ™˜์„ ์˜๋ฏธํ•˜์ง€๋งŒ ๋งˆ์ƒฌ๋ง์€ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธ
  • ์–ธ๋งˆ์ƒฌ๋ง(Unmarshalling) : ๋งˆ์ƒฌ๋ง์„ ํ†ตํ•ด ์ „์†ก๋œ ๋ฐ์ดํ„ฐ๋“ค์„ ์›๋ž˜ ๊ตฌ์กฐ๋กœ ๋ณต์›์‹œํ‚ค๋Š” ์ž‘์—…
  • ๋‹ท๋„ท(.NET)์—์„œ๋Š” ์ฐธ์กฐ ๋งˆ์ƒฌ๋ง (MBR), ๊ฐ’ ๋งˆ์ƒฌ๋ง (MBV) ์ง€์›
์ฐธ์กฐ ๋งˆ์ƒฌ๋ง (Marshal By Reference, MBR)
- ๊ฐ์ฒด์˜ ์ •๋ณด๋งŒ์„ ๋ฌถ์–ด์„œ ์ „์†กํ•œ ํ›„ ๊ทธ ์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ ์›๊ฒฉ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ํ•ธ๋“ค๋ง
- MarshalByRefObject๋ฅผ ์ƒ์‡ฝ

๊ฐ’ ๋งˆ์ƒฌ๋ง (Marshal By Value, MBV)

- ๊ฐ์ฒด ๋ฉ”๋ชจ๋ฆฌ ์ „์ฒด๋ฅผ ์ €์žฅํ•œ ํ›„ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ฐ์ฒด๋ฅผ ๋ณต์›ํ•˜์—ฌ ์‚ฌ์šฉ
- Serializable Attribute๋ฅผ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ISerializable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„
  • ๋งˆ์ƒฌ๋ง ํ”„๋กœ์„ธ์Šค
1. Marshalling : ์ง๋ ฌํ™”๋œ ๊ฐ์ฒด๋ฅผ Byte ๋‹จ์œ„๋กœ ๋ถ„ํ•ด
2. ์ง๋ ฌํ™”๋˜์–ด ๋ถ„ํ•ด๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ „์†ก
3. Unmarshalling : ์ „์†ก๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์›๋ž˜ ์ƒํƒœ๋กœ ๋ณต๊ตฌ

 


 

๊ธฐ๋ณธ ๋งˆ์ƒฌ๋ง ๋™์ž‘ - .NET Framework

.NET์˜ ๊ธฐ๋ณธ ๋งˆ์ƒฌ๋ง ๋™์ž‘์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค. Interop ๋งˆ์ƒฌ๋ง์„ ์‚ฌ์šฉํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ํด๋ž˜์Šค, ๋Œ€๋ฆฌ์ž ๋ฐ ๊ฐ’ ํ˜•์‹์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๋งˆ์ƒฌ๋ง์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

learn.microsoft.com

 

์ง๋ ฌํ™”(Serialization)์™€ ๋งˆ์ƒฌ๋ง(Marshalling)์— ๋Œ€ํ•ด์„œ

1. ์ง๋ ฌํ™”(Serialization) ์ง๋ ฌํ™”๋Š” ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ์ฒด๋ฅผ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ(Byte Stream) ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 1.1 ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ(Byte Stream) ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์ด๋ž€(Byte Stream) ๋Š์ž„์—†์ด

taeksumart.tistory.com

 

๋งˆ์ƒฌ๋ง(Marshalling) vs ์ง๋ ฌํ™”(Serialization)

ํด๋ฆฐ์ฝ”๋“œ 14์žฅ๋ณด๋ฉด์„œ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํŒŒ์ผ ๋งŒ๋“ค์–ด๋’€๋Š”๋ฐ ์ด์ œ์•ผ ์“ด๋‹ค. ์ง๋ ฌํ™”๋Š” ๋งŽ์ด ๋“ค์–ด๋ด์„œ ๊ทธ๋Ÿฐ๊ฐ‘๋‹ค..ํ•˜๋Š”๋ฐ, ๋งˆ์ƒฌ๋ง์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์ €๋•Œ ์ฒ˜์Œ ๋“ค์–ด๋ด์„œ ์ข€ ์ฐพ์•„๋ดค์—ˆ๋‹ค. ์ฐพ์•„๋ณด๋ฉด ๊ด€๋ จ ๊ธ€๋“ค์ด ๊ฝค

hyesun03.github.io

 

๋ฐ์ดํ„ฐ ์ง๋ ฌํ™”(serialization)๋Š” ๋ฌด์—‡์ด๊ณ  ์™œ ํ•„์š”ํ•œ๊ฐ€?

์šฐ์„  ์ด ๊ธ€์€ ๊ตฌ๊ธ€๋ง์—์„œ ๋‚˜์˜ค๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ง๋ ฌํ™”์— ๋Œ€ํ•œ ๊ธ€๋“ค๊ณผ ์„ค๋ช…๋“ค์„ ์ฝ๊ณ  ์ œ ๋‚˜๋ฆ„๋Œ€๋กœ ํ•œ๋ฒˆ ๋” ์ดํ•ดํ•˜๊ธฐ ํŽธํ•˜๋„๋ก ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™”(serialization), ์—ญ์ง๋ ฌํ™”(deserialization)๋Š”

hub1234.tistory.com

728x90
๋ฐ˜์‘ํ˜•