Immutable Objectλž€?

· β˜• 2 min read · πŸ‘€... views

Q. Immutable Object (λΆˆλ³€κ°μ²΄) 에 λŒ€ν•΄ μ„€λͺ…ν•˜κ³ , μžλ°” 클래슀 쀑 λŒ€ν‘œμ μΈ 사둀λ₯Ό μ•Œλ €μ£Όμ„Έμš”.

A. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ— μžˆμ–΄ λΆˆλ³€ κ°μ²΄λŠ” 생성 ν›„ κ·Έ μƒνƒœλ₯Ό λ°”κΏ€ 수 μ—†λŠ” 객체λ₯Ό λ§ν•œλ‹€. (νž™ μ˜μ—­μ—μ„œ κ·Έ 객체가 가리킀고 μžˆλŠ” 데이터 자체의 λ³€ν™”κ°€ λΆˆκ°€λŠ₯) λΆˆλ³€ 객체λ₯Ό μ‚¬μš©ν•˜λ©΄ λ³΅μ œλ‚˜ 비ꡐλ₯Ό μœ„ν•œ μ‘°μž‘μ„ λ‹¨μˆœν™” ν•  수 있고, μ„±λŠ₯ κ°œμ„ μ—λ„ 도움을 μ€€λ‹€. ν•˜μ§€λ§Œ 객체가 λ³€κ²½ κ°€λŠ₯ν•œ 데이터λ₯Ό 많이 가지고 μžˆλŠ” κ²½μš°μ—” λΆˆλ³€μ΄ 였히렀 λΆ€μ μ ˆν•œ κ²½μš°κ°€ μžˆλ‹€. 이 떄문에 λ§Žμ€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œλŠ” λΆˆλ³€μ΄λ‚˜ κ°€λ³€ 쀑 ν•˜λ‚˜λ₯Ό 선택할 수 μžˆλ„λ‘ ν•˜κ³  μžˆλ‹€.

  • λŒ€ν‘œμ μΈ μžλ°” ν΄λž˜μŠ€μ—λŠ” String 이 μžˆλ‹€.

  • String a = "aa" ν›„ a = "bb" λŠ” “bb” 에 λŒ€ν•œ μƒˆλ‘œμš΄ 객체λ₯Ό λ§Œλ“œλŠ” 것

    λ‹€λ₯Έ 상황일 μˆ˜λ„ μžˆλŠ”λ°, κ²½ν—˜ν•œ κ±Έ μ„€λͺ…ν•˜λ©΄ λ©”μ†Œλ“œ νŒŒλΌλ―Έν„°λ₯Ό 받을 λ•Œ final μ΄λΌλŠ” νŒŒλΌλ―Έν„°λ₯Ό μ‚¬μš©ν•œλ‹€. μ΄λŠ” νŒŒλΌλ―Έν„°λ₯Ό λ³€κ²½ν•  수 없도둝 ν•˜κΈ° μœ„ν•΄μ„œ λΆ™μ΄λŠ”λ°, 이게 primitive νƒ€μž…μ΄λ‚˜ 단일 κ°μ²΄μ—μ„œλŠ” μœ νš¨ν•œλ°, collection κ°μ²΄μ—μ„œλŠ” μ•ˆλœλ‹€. 특히 Map 을 받을 λ•Œ..

    κ·Έλž˜μ„œ λΆˆλ³€κ°μ²΄μ— λŒ€ν•΄μ„œ final 을 λΆ™μ˜€μœΌλ‹ˆ λΆˆλ³€μ΄μ§€ ν•˜λŠ” 생각은 μ•ˆν•˜λŠ”κ²Œ 쒋을 것 κ°™λ‹€.

  • μž₯점

    1. 객체에 λŒ€ν•œ 신뒰도가 높아진닀. 객체가 μƒμ„±λ˜μ–΄ λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄, (μƒνƒœκ°€ λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄) transaction λ‚΄μ—μ„œ κ·Έ 객체λ₯Ό λ―Ώκ³  μ“Έ 수 μžˆλ‹€.
    2. λ©€ν‹° μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œ 동기화 처리 없이 객체λ₯Ό κ³΅μœ ν•  수 μžˆλ‹€.
  • 단점

    1. 객체가 κ°€μ§€λŠ” κ°’λ§ˆλ‹€ μƒˆλ‘œμš΄ 객체λ₯Ό ν•„μš”λ‘œ ν•˜κΈ° λ•Œλ¬Έμ—, λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ™€ μƒˆλ‘œμš΄ 객체λ₯Ό 계속 생성해야 ν•˜κΈ° λ•Œλ¬Έμ— μ„±λŠ₯ μ €ν•˜λ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆλ‹€. (이걸 μ‹€λ¬΄μ—μ„œ μ§μ ‘μ μœΌλ‘œ κ²ͺ은 적은 μ—†λŠ”λ°, μ•„μ΄λŸ¬λ‹ˆ ν•˜κ²Œλ„, μ½”λ”©ν…ŒμŠ€νŠΈλ₯Ό ν•˜λ‹€κ°€ κ²ͺ은 적이 μžˆλ‹€…. String 을 μ“°λ©΄ μ‹œκ°„ 초과인데, StringBuilder λ₯Ό μ“°λ©΄ 톡과가 됐닀.)
Share on

snack
WRITTEN BY
snack
Web Programmer


What's on this Page