item 72 dodo4513 - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

μ•„μ΄ν…œ72 ν‘œμ€€ μ˜ˆμ™Έλ₯Ό μ‚¬μš©ν•˜λΌ

무엇이 μ’‹μ•„μ§€λ‚˜?

  • μ—¬λŸ¬λΆ„μ˜ APIκ°€ λ‹€λ₯Έ μ‚¬λžŒμ΄ 읡히고 μ‚¬μš©ν•˜κΈ° μ‰¬μ›Œμ§„λ‹€λŠ” 것이닀.
    λ§Žμ€ ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ 이미 μ΅μˆ™ν•΄μ§„ κ·œμ•½μ„ κ·ΈλŒ€λ‘œ λ”°λ₯΄κΈ° λ•Œλ¬Έμ΄λ‹€.
  • μ˜ˆμ™Έν΄λž˜μŠ€ μˆ˜κ°€ μ μ„μˆ˜λ‘ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰λ„ 쀄고 클래슀λ₯Ό μ μž¬ν•˜λŠ” μ‹œκ°„λ„ 적게 κ±Έλ¦°λ‹€.

μ‚¬μš©ν•˜λ©΄ 쒋은 μ˜ˆμ™Έλ“€

IllegalArgumentException

ν˜ΈμΆœμžκ°€ 인수둜 λΆ€μ μ ˆν•œ 값을 λ„˜κΈΈ λ•Œ λ˜μ§€λŠ” μ˜ˆμ™Έλ‘œ, 예λ₯Ό λ“€μ–΄ 반볡 횟수λ₯Ό μ§€μ •ν•˜λŠ” λ§€κ°œλ³€μˆ˜μ— 음수λ₯Ό 건넬 λ•Œ μ“Έ 수 μžˆλ‹€.

IllegalStateException

이 μ˜ˆμ™ΈλŠ” λŒ€μƒ 객체의 μƒνƒœκ°€ 호좜된 λ©”μ„œλ“œλ₯Ό μˆ˜ν–‰ν•˜κΈ°μ— μ ν•©ν•˜μ§€ μ•Šμ„ λ•Œ 주둜 λ˜μ§„λ‹€. μ˜ˆμ»¨λŒ€ μ œλŒ€λ‘œ μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ 객체λ₯Ό μ‚¬μš©ν•˜λ € ν•  λ•Œ 던질 수 μžˆλ‹€.

NullPointerException

λ©”μ„œλ“œκ°€ λ˜μ§€λŠ” λͺ¨λ“  μ˜ˆμ™Έλ₯Ό 잘λͺ»λœ μΈμˆ˜λ‚˜ μƒνƒœλΌκ³  λ­‰λš±κ·Έλ¦΄ μˆ˜λ„ μžˆκ² μ§€λ§Œ, 그쀑 νŠΉμˆ˜ν•œ μΌλΆ€λŠ” λ”°λ‘œ ꡬ뢄해 μ“°λŠ” 게 보톡이닀. null 값을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” λ©”μ„œλ“œμ— null을 건넀면 관둀상 IllegalArgumentException이 μ•„λ‹Œ NullPointerException을 λ˜μ§„λ‹€.

IndexOutOfBoundsException

λΉ„μŠ·ν•˜κ²Œ, μ–΄λ–€ μ‹œν€€μŠ€μ˜ ν—ˆμš© λ²”μœ„λ₯Ό λ„˜λŠ” 값을 건넬 λ•Œλ„ IllegalArgumentExceptionλ³΄λ‹€λŠ” IndexOutOfBoundsException 을 λ˜μ§„λ‹€.

ConcurrentModificationException

단일 μŠ€λ ˆλ“œμ—μ„œ μ‚¬μš©ν•˜λ €κ³  μ„€κ³„ν•œ 객체λ₯Ό μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μˆ˜μ •ν•˜λ € ν•  λ•Œ λ˜μ§„λ‹€(μ™ΈλΆ€ 동기화 λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•˜λ €κ³  μ„€κ³„ν•œ 객체도 λ§ˆμ°¬κ°€μ§€λ‹€). 사싀 λ™μ‹œ μˆ˜μ •μ„ ν™•μ‹€νžˆ κ²€μΆœν•  수 μžˆλŠ” μ•ˆμ •λœ 방법은 μ—†μœΌλ‹ˆ, 이 μ˜ˆμ™ΈλŠ” λ¬Έμ œκ°€ 생길 κ°€λŠ₯성을 μ•Œλ €μ£ΌλŠ” μ •λ„μ˜ μ—­ν• λ‘œ 쓰인닀.

UnsupportedOperationException

이 μ˜ˆμ™ΈλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•œ λ™μž‘μ„ λŒ€μƒ 객체가 μ§€μ›ν•˜μ§€ μ•Šμ„ λ•Œ λ˜μ§„λ‹€. λŒ€λΆ€λΆ„ κ°μ²΄λŠ” μžμ‹ μ΄ μ •μ˜ν•œ λ©”μ„œλ“œλ₯Ό λͺ¨λ‘ μ§€μ›ν•˜λ‹ˆ ν”νžˆ μ“°μ΄λŠ” μ˜ˆμ™ΈλŠ” μ•„λ‹ˆλ‹€.

보톡은 κ΅¬ν˜„ν•˜λ €λŠ” μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ„œλ“œ 일뢀λ₯Ό κ΅¬ν˜„ν•  수 없을 λ•Œ μ“°λŠ”λ°, μ˜ˆμ»¨λŒ€ μ›μ†Œλ₯Ό 넣을 수만 μžˆλŠ” List κ΅¬ν˜„μ²΄μ— λŒ€κ³  λˆ„κ΅°κ°€ remove λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ 이 μ˜ˆμ™Έλ₯Ό 던질 것이닀.

주의점

Exception, RuntimeException, Throwable, ErrorλŠ” 직접 μž¬μ‚¬μš©ν•˜μ§€ 말자.

이 ν΄λž˜μŠ€λ“€μ€ 좔상 클래슀라고 μƒκ°ν•˜κΈΈ λ°”λž€λ‹€. 이 μ˜ˆμ™Έλ“€μ€ λ‹€λ₯Έ μ˜ˆμ™Έλ“€μ˜ μƒμœ„ ν΄λž˜μŠ€μ΄λ―€λ‘œ, 즉 μ—¬λŸ¬ μ„±κ²©μ˜ μ˜ˆμ™Έλ“€μ„ ν¬κ΄„ν•˜λŠ” ν΄λž˜μŠ€μ΄λ―€λ‘œ μ•ˆμ •μ μœΌλ‘œ ν…ŒμŠ€νŠΈν•  수 μ—†λ‹€.

더 λ§Žμ€ 정보λ₯Ό μ œκ³΅ν•˜κΈΈ μ›ν•œλ‹€λ©΄ ν‘œμ€€ μ˜ˆμ™Έλ₯Ό ν™•μž₯해도 μ’‹λ‹€.

단, μ˜ˆμ™ΈλŠ” 직렬화할 수 μžˆλ‹€λŠ” 사싀을 κΈ°μ–΅ν•˜μž(12μž₯). (μ§λ ¬ν™”μ—λŠ” λ§Žμ€ 뢀담이 λ”°λ₯΄λ‹ˆ) 이 μ‚¬μ‹€λ§ŒμœΌλ‘œλ„ λ‚˜λ§Œμ˜ μ˜ˆμ™Έλ₯Ό μƒˆλ‘œ λ§Œλ“€μ§€ μ•Šμ•„μ•Ό ν•  근거둜 μΆ©λΆ„ν•  수 μžˆλ‹€.