Immutable Class

λΆˆλ³€ ν΄λž˜μŠ€λŠ” 말 κ·ΈλŒ€λ‘œ λΆˆλ³€ 값이 λ³€κ²½λ˜μ§€ μ•ŠλŠ” ν΄λž˜μŠ€μ΄λ‹€.

μ΄λŠ” λ‹€μ‹œ 말해 가변적이지 μ•ŠμœΌλ©° 생성후 λ³€κ²½ λΆˆκ°€λŠ₯ν•œ 객체이닀.

λŒ€ν‘œμ μœΌλ‘œ String, Boolean, Integer, Float, Long 등등이 μžˆλ‹€.

String str = "문자";
str = "숫자";

λ³€μˆ˜ str 은 JVM 의 Heap μ˜μ—­μ—μ„œ 값이 λ³€κ²½λ˜λŠ”κ²ƒμ΄ μ•„λ‹ˆλΌ 숫자 λΌλŠ” κ°’μœΌλ‘œ μž¬ν• λ‹Ήμ΄ λ˜λŠ”κ²ƒμ΄λ‹€.

μ΄λŠ” λ‹€μ‹œ 말해 숫자 λΌλŠ” 값이 μƒˆλ‘œ μƒμ„±λ˜μ–΄ λŒ€μ²΄λ˜λŠ” κ²ƒμœΌλ‘œ Heap μ˜μ—­μ˜ μ°Έμ‘°λŒ€λŠ” 객체 λŒ€μƒμ΄ λ°”λ€ŒλŠ”κ²ƒμ΄λ‹€.

μž₯점

  • μƒμ„±μž, μ ‘κ·Όλ©”μ„œλ“œμ— λŒ€ν•œ 방어적 볡사 (Defensive Copy) κ°€ ν•„μš”κ°€ μ—†λ‹€.
  • λ©€ν‹°μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œ 동기화 처리 없이 객체λ₯Ό κ³΅μœ ν•  수 μžˆλ‹€.
  • Thread-Safe ν•˜κΈ° λ•Œλ¬Έμ— 객체가 μ•ˆμ „ν•˜λ‹€.

단점

  • 객체가 κ°€μ§€λŠ” κ°’λ§ˆλ‹€ μƒˆλ‘œμš΄ 객체가 ν•„μš”ν•˜λ‹€.
  • λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ™€ μƒˆλ‘œμš΄ 객체λ₯Ό κ³„μ†ν•΄μ„œ 생성해야 ν•œλ‹€λŠ” 점 λ•Œλ¬Έμ— μ„±λŠ₯μ €ν•˜λ₯Ό μ•ΌκΈ°μ‹œν‚¬ 수 μžˆλ‹€.

String / StringBuffer / StringBuilder 의 μ‚¬μš©

λ¬Έμžμ—΄μ„ λ”ν•˜λŠ” μ‹μ—λŠ” String λ³΄λ‹€λŠ” StringBuffer λ‚˜ StringBuilder 을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

String 은 μƒˆλ‘œμš΄ 값을 ν• λ‹Ήν•  λ•Œλ§ˆλ‹€ μƒˆλ‘œ μƒμ„±λ˜κΈ° λ•Œλ¬Έ (클래슀의 λ©”λͺ¨λ¦¬ μ°Έμ‘° μ£Όμ†Œκ°€ λ°”λ€œ)

StringBuffer λ‚˜ stringBuilder λŠ” 값을 λ©”λͺ¨λ¦¬μ— append ν•˜λŠ” λ°©μ‹μœΌλ‘œ 클래슀λ₯Ό λ³„λ„λ‘œ μƒμ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.

StringBuilder λŠ” λ³€κ²½ κ°€λŠ₯ν•œ λ¬Έμžμ—΄λ‘œ synchronization 이 μ μš©λ˜μ§€ μ•ŠλŠ”λ‹€.

StringBuffer λŠ” λ©€ν‹°μ“°λ ˆλ“œ ν™˜κ²½μ—μ„œ μ•ˆμ •μ  이닀.

참고자료

https://limkydev.tistory.com/68