final ν‚€μ›Œλ“œ

λ³€κ²½ λΆˆκ°€, λ³€κ²½ κΈˆμ§€, μƒμˆ˜, 상속 λΆˆκ°€, μ˜€λ²„λΌμ΄λ”© λΆˆκ°€

final μ΄λž€?

  • final의 λœ»μ„ μ•Œμ•„λ³΄λ©΄ λ§ˆμ§€λ§‰, μ΅œμ’…μ˜, λ³€κ²½ν•  수 μ—†λŠ” κ³Ό 같은 뜻으둜 μ‚¬μš©λœλ‹€.

  • λ§Œμ•½ ν”„λ‘œκ·Έλž˜λ° 쀑 μ–΄λ–€ κ°’μ˜ 변경을 μ›ν•˜μ§€ μ•ŠμœΌλ©΄ final(μƒμˆ˜) ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

final μƒμˆ˜

// λ³€κ²½ κ°€λŠ₯
int variable = 10;
variable = 20;

// λ³€κ²½ λΆˆκ°€λŠ₯
final variable = 10;
variable = 20;
--> Cannot assign a value to final variable λ©”μ‹œμ§€κ°€ 좜λ ₯ 될것이닀.

// 넀이밍
final int UN_CHANGEABLE_VARIABLE = 10;

// μ΄λ ‡κ²Œλ„ μ„ μ–Έ κ°€λŠ₯(졜초 1회)
final int variable;
variable = 1;
  • final ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” λ³€μˆ˜λ“€μ€ κ°€λŠ₯ν•˜λ©΄ λŒ€λ¬Έμžλ₯Ό μ‚¬μš©ν•œλ‹€.

final 객체

μ˜ˆμ „μ— λ‚˜λŠ” λ‹€μŒκ³Ό 같이 μ„ μ–Έ ν›„, μƒμ„±μžλ₯Ό 톡해 listλ₯Ό μ΄ˆκΈ°ν™” μ‹œμΌ°μ—ˆλ‹€.

ν•˜μ§€λ§Œ μ™ΈλΆ€μ—μ„œ get을 톡해 list의 값이 μˆ˜μ •λ˜μ—ˆλ‹€.

μ™œ κ·Έλž¬μ„κΉŒ?

final ν‚€μ›Œλ“œλ₯Ό κ°€μ§„ λ³€μˆ˜λŠ” 값을 μˆ˜μ •ν•  수 μ—†μ—ˆλ‹€. ν•˜μ§€λ§Œ 객체(μ»¬λ ‰μ…˜ 포함)일 κ²½μš°μ—λŠ” λ‹¬λžλ‹€.

  • 객체 μžμ²΄λŠ” immutable λ˜μ§€ μ•ŠλŠ”λ‹€. 즉 μ†μ„±μ˜ 경우 변경이 κ°€λŠ₯ν•œ μƒνƒœλ‘œ μœ μ§€λœλ‹€.

예λ₯Ό λ“€μ–΄ List 객체가 μ‘΄μž¬ν•˜λŠ”λ°,

μœ„μ™€ 같이 μˆ˜μ •μ΄ κ°€λŠ₯ν•œ 것이닀. μ΄μœ λŠ” final(μƒμˆ˜) listλŠ” ArrayList의 값을 κ°€μ§€κ³  μžˆλŠ”κ²ƒμ΄ μ•„λ‹ˆλΌ, ArrayList의 객체의 μ°Έμ‘°ν•˜λŠ” μ£Όμ†Œλ₯Ό κ°€μ§€κ³  μžˆλŠ” 것이닀.

그러면 μ»¬λ ‰μ…˜μ˜ 변경은 막을 수 μ—†μ„κΉŒ?

  • Collections.unmodifiableList 을 μ‚¬μš©ν•˜λ©΄ 변경이 λΆˆκ°€λŠ₯ ν•΄μ§„λ‹€.

  • μ»¬λ ‰μ…˜μ˜ 변경을 μ›μΉ˜ μ•ŠλŠ”λ‹€λ©΄ μ‚¬μš©ν•΄λ³΄μž.

final λ©”μ†Œλ“œ

  • λ©”μ†Œλ“œμ— fianl ν‚€μ›Œλ“œκ°€ μžˆλ‹€λ©΄ 이 λ©”μ†Œλ“œλŠ” Override(μ˜€λ²„λΌμ΄λ”©)이 λΆˆκ°€λŠ₯ ν•˜λ‹€λŠ” λœ»μž…λ‹ˆλ‹€.

  • final λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”© ν•˜κ²Œλ˜λ©΄ μ•„λž˜μ™€ 같은 λ©”μ„Έμ§€λ₯Ό 좜λ ₯ν•œλ‹€.

    • 'getParent()' cannot override 'getParent()' in 'Parent'; overridden method is final

final 클래슀

  • ν΄λž˜μŠ€μ— final이 λΆ™κ²Œλ˜λ©΄ 클래슀 자체λ₯Ό 상속 λΆˆκ°€λŠ₯ν•˜κ²Œ λ§Œλ“­λ‹ˆλ‹€.

Last updated