readonly vs. const

Β  readonly const
κ°’ μ •μ˜ λŸ°νƒ€μž„ 컴파일 νƒ€μž„
λ©”λͺ¨λ¦¬ ν• λ‹Ή μœ„μΉ˜ Heap Stack(static ν‚€μ›Œλ“œλ‘œ Heap에 μ €μž₯ κ°€λŠ₯)
μ ‘κ·Ό 속도 느림 빠름
초기회 μƒμ„±μž λ‹¨κ³„μ—μ„œ ν• λ‹Ή λ³€μˆ˜ μ„ μ–Έκ³Ό λ™μ‹œμ— κ°’ ν• λ‹Ή
μžλ£Œν˜• λͺ¨λ“  μžλ£Œν˜• λ‚΄μž₯ μžλ£Œν˜•
정적 ν•„λ“œ static ν‚€μ›Œλ“œ μ‚¬μš© κ°€λŠ₯ μ„ μ–Έκ³Ό λ™μ‹œμ— μ •μ ν•„λ“œμ— μžλ™ ν• λ‹Ή

readonlyλ₯Ό μ“°λŠ” 이유

  • constλŠ” 컴파일 μƒμˆ˜
    • λ³€μˆ˜ 값이 λ°”λ€ŒλŠ” 경우 μ°Έμ‘° λ°›κ±°λ‚˜ 영ν–₯을 λ°›λŠ” ν”„λ‘œμ νŠΈ λͺ¨λ‘ λ‹€μ‹œ 컴파일
  • readonlyλŠ” 생성 μ‹œ μ„ μ–Έν•˜μ§€ μ•Šμ•„λ„ μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™” ν•˜μ—¬ μ‚¬μš©
    • μ‹€μ œ μ‚¬μš©ν•˜λŠ” λ‹¨κ³„μ—μ„œ λ³€μˆ˜μ˜ 값을 κ°€μ Έμ˜¬ 수 있음
    • μƒμˆ˜κ°’ λ³€κ²½ μ‹œ μž¬μ»΄νŒŒμΌμ„ ν•˜μ§€ μ•ŠμŒ
    • μ‚¬μš©ν•˜λŠ” μƒμ„±μž λ‹¨μ—μ„œ λ³€μˆ˜μ— 값을 ν• λ‹Ήν•΄μ„œ μ‚¬μš© ν•  수 있음

μ‚¬μš© μ˜ˆμ‹œ

// case 1:
class TEST
{
  public readonly string test = "start";

  // constructor μ•ˆμ—μ„œ μ΄ˆκΈ°ν™” κ°€λŠ₯
  public TEST()
  {
    test = "abc";
  }
  public TEST(string s1)
  {
    test = s1;
  }
}

// case 2:
// readonlyλŠ” μ§€μ—­ λ³€μˆ˜λ‘œ μ‚¬μš© λΆˆκ°€
static void Main(string [] args)
{
  const int abc = 3;    // ok
  readonly int def = 6; // error
}

좜처

Categories: ,

Updated: