포슀트

πŸŒ’ Boxing, Unboxing

  • λ¨Όμ €
    • νž™κ³Ό μŠ€νƒμ— λŒ€ν•΄ μ•Œμ•„μ•Ό ν•œλ‹€.
    • κ°’κ³Ό 참쑰에 λŒ€ν•΄ μ•Œμ•„μ•Ό ν•œλ‹€.
    • κ°’ ν˜•μ‹μ€ μŠ€νƒμ— μ €μž₯되며, μ°Έμ‘° ν˜•μ‹μ€ νž™μ— μ €μž₯λ©λ‹ˆλ‹€.
    • κ°’ ν˜•μ‹μ„ νž™μ— μ €μž₯λ˜λ„λ‘ ν•˜λ €λ©΄ 박싱이 ν•„μš”ν•˜λ‹€.

πŸ’« Q


  • Object νƒ€μž…μ— Value νƒ€μž…μ„ λŒ€μž…ν•˜λ©΄
    • Valueλ₯Ό 레퍼런슀 νƒ€μž…μœΌλ‘œ Boxing
    • Stack에 있던 Valueλ₯Ό Heap으둜 볡사 ν›„ μ£Όμ†Œκ°’μ„ ν• λ‹Ή
  • λ°•μ‹±κ³Ό 언박싱에 λŒ€ν•΄ μ„€λͺ…ν•΄ μ£Όμ„Έμš”.
  • 가비지에 λŒ€ν•˜μ—¬

πŸ’« Boxing, Unboxing


🫧 λ°•μ‹±(Boxing)

κ°’ ν˜•μ‹μ˜ μΈμŠ€ν„΄μŠ€ -> μ°Έμ‘° ν˜•μ‹μœΌλ‘œ λ³€ν™˜.

1
2
int n = 4615; // κ°’
object someObject = n; //κ°’ -> μ°Έμ‘°

Stack에 있던 κ°’ νƒ€μž…μ˜ 객체λ₯Ό Heap으둜 이동할 λ•Œ, 볡사가 ν•œλ²ˆ μΌμ–΄λ‚œλ‹€.
Heap에 λ³΅μ‚¬λœ 이 μ˜μ—­μ„ μ°Έμ‘° νƒ€μž…μ΄ κ°€λ¦¬ν‚€κ²Œ λ˜λŠ” 일을 μˆ˜ν–‰ν•œλ‹€.

μ΄λ ‡κ²Œ λ°•μ‹± 된 κ°’ ν˜•μ‹μ€ λ©”λͺ¨λ¦¬ 곡간을 더 많이 μ‚¬μš©ν•˜κ³  μ„±λŠ₯에 영ν–₯을 λ―ΈμΉ  수 μžˆμœΌλ―€λ‘œ λΆˆν•„μš”ν•œ 박싱은 ν”Όν•΄μ•Όλœλ‹€.

🫧 μ–Έλ°•μ‹±(Unboxing)

λ°•μ‹±λœ κ°’ -> μ›λž˜μ˜ κ°’ ν˜•μ‹μœΌλ‘œ λ³€ν™˜.

1
int n = (int)someObject; //μ°Έμ‘° -> κ°’

Heap에 있던 데이터λ₯Ό Stack으둜 볡사.

C# 2.0λΆ€ν„°λŠ” μ œλ„€λ¦­(Generic)을 μ‚¬μš©ν•˜μ—¬ λ°•μ‹±κ³Ό 언박싱을 ν”Όν•  수 μžˆλŠ” 방법을 μ œκ³΅ν•˜λ―€λ‘œ μ œλ„€λ¦­μ„ ν™œμš©ν•˜λŠ” 것이 μ’‹λ‹€.

이 κΈ°μ‚¬λŠ” μ €μž‘κΆŒμžμ˜ CC BY 4.0 λΌμ΄μ„ΌμŠ€λ₯Ό λ”°λ¦…λ‹ˆλ‹€.