item 74 SeungminLee - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

Effective Java 3e item 74 λ©”μ„œλ“œκ°€ λ˜μ§€λŠ” λͺ¨λ“  μ˜ˆμ™Έλ₯Ό λ¬Έμ„œν™”ν•˜λΌλ₯Ό μš”μ•½ν•œ λ‚΄μš©μž…λ‹ˆλ‹€.

λ©”μ„œλ“œκ°€ λ˜μ§€λŠ” μ˜ˆμ™ΈλŠ” κ·Έ λ©”μ„œλ“œλ₯Ό μ˜¬λ°”λ‘œ μ‚¬μš©ν•˜λŠ” 데 μ•„μ£Ό μ€‘μš”ν•œ 정보닀. λ”°λΌμ„œ μ˜ˆμ™Έ ν•˜λ‚˜ν•˜λ‚˜λ₯Ό λ¬Έμ„œν™”λ₯Ό ν•˜λŠ”λ° μΆ©λΆ„ν•œ μ‹œκ°„μ„ μŸμ•„μ•Ό ν•œλ‹€.

검사 μ˜ˆμ™ΈλŠ” 항상 λ”°λ‘œλ”°λ‘œ μ„ μ–Έν•˜κ³ , 각 μ˜ˆμ™Έκ°€ λ°œμƒν•˜λŠ” 상황을 μžλ°”λ…μ˜ @throws νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ μ •ν™•νžˆ λ¬Έμ„œν™” ν•˜μž.

곡톡 μƒμœ„ 클래슀 ν•˜λ‚˜λ‘œ λ­‰λš±κ·Έλ € μ„ μ–Έν•˜λŠ” 일은 μ‚Όκ°€μž.

극단적인 예둜 λ©”μ„œλ“œκ°€ μ΅œμƒμœ„ μ˜ˆμ™ΈμΈ Exceptionκ³Ό Throwable을 λ˜μ§„λ‹€κ³  ν•΄μ„œλŠ” μ•ˆλœλ‹€.

main λ©”μ„œλ“œλŠ” JVM만이 ν˜ΈμΆœν•˜κΈ° λ•Œλ¬Έμ— μ˜ˆμ™Έμ΄λ‹€.

비검사 μ˜ˆμ™Έλ„ 검사 μ˜ˆμ™Έμ²˜λŸΌ 정성껏 λ¬Έμ„œν™” 해두면 μ’‹λ‹€.

  1. 비검사 μ˜ˆμ™ΈλŠ” 일반적으둜 ν”„λ‘œκ·Έλž˜λ° 였λ₯˜λ₯Ό λœ»ν•˜λŠ”λ°, μžμ‹ μ΄ μΌμœΌν‚¬ 수 μžˆλŠ” μ˜€μœ λ“€μ΄ 무엇인지 μ•Œλ €μ£Όλ©΄ ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” μžμ—°μŠ€λŸ½κ²Œ 였λ₯˜κ°€ λ‚˜μ§€ μ•ŠλŠ” μͺ½μœΌλ‘œ 코딩을 ν•˜κ²Œ λœλ‹€.
  2. public λ©”μ†Œλ“œλΌλ©΄ ν•„μš”ν•œ μ „μ œμ‘°κ±΄μ„ λ¬Έμ„œν™” ν•΄μ•Όν•˜λ©° κ·Έ μˆ˜λ‹¨μœΌλ‘œ κ°€μž₯ 쒋은 것이 λ°”λ‘œ 비검사 μ˜ˆμ™Έλ“€μ„ λ¬Έμ„œν™”ν•˜λŠ” 것이닀.
  3. λ°œμƒ κ°€λŠ₯ν•œ 비검사 μ˜ˆμ™Έλ₯Ό λ¬Έμ„œλ‘œ λ‚¨κΈ°λŠ” 일은 μΈν„°νŽ˜μ΄μŠ€ λ©”μ„œλ“œμ—μ„œ 특히 μ€‘μš”ν•˜λ‹€.

이 쑰건이 μΈν„°νŽ˜μ΄μŠ€μ˜ 일반 κ·œμ•½μ— μ†ν•˜κ²Œ λ˜μ–΄ κ·Έ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ λͺ¨λ“  κ΅¬ν˜„μ²΄κ°€ μΌκ΄€λ˜κ²Œ λ™μž‘ν•˜λ„λ‘ ν•΄μ£ΌκΈ° λ•Œλ¬Έμ΄λ‹€.

λ©”μ„œλ“œκ°€ 던질 수 μžˆλŠ” μ˜ˆμ™Έλ₯Ό 각각 @throws νƒœκ·Έλ‘œ λ¬Έμ„œν™”ν•˜λ˜, 비검사 μ˜ˆμ™ΈλŠ” λ©”μ„œλ“œ μ„ μ–Έμ˜ throws λͺ©λ‘μ— 넣지 말자

검사냐 비검사냐에 따라 API μ‚¬μš©μžκ°€ ν•΄μ•Ό ν•  일이 λ‹¬λΌμ§€λ―€λ‘œ 이 λ‘˜μ„ ν™•μ‹€νžˆ κ΅¬λΆ„ν•΄μ£ΌλŠ”κ²Œ μ’‹λ‹€.

μžλ°”λ… μœ ν‹Έλ¦¬ν‹°λŠ” λ©”μ„œλ“œ μ„ μ–Έμ˜ throwsμ ˆμ— λ“±μž₯ν•˜κ³  λ©”μ„œλ“œ μ£Όμ„μ˜ @throws νƒœκ·Έμ—λ„ λͺ…μ‹œν•œ μ˜ˆμ™Έμ™€ @throwsνƒœκ·Έμ—λ§Œ λͺ…μ‹œν•œ μ˜ˆμ™Έλ₯Ό μ‹œκ°μ μœΌλ‘œ ꡬ뢄해쀀닀. >?

   /**
     *
     * @return secondField
     * @throws NullPointerException if parameter is null or empty λΉ„κ²€μ‚¬μ˜ˆμ™Έ
     * @throws IllegalAccessError if someone access κ²€μ‚¬μ˜ˆμ™Έ
     */
    public int getSecondField() throws IllegalAccessError {
        return secondField;
    }
검사

비검사 μ˜ˆμ™Έλ„ λͺ¨λ‘ λ¬Έμ„œν™”ν•˜λΌκ³ λŠ” ν–ˆμ§€λ§Œ ν˜„μ‹€μ μœΌλ‘œ λΆˆκ°€λŠ₯ν• λ•Œλ„ μžˆλ‹€.

클래슀λ₯Ό μˆ˜μ •ν•˜λ©΄μ„œ μƒˆλ‘œμš΄ 비검사 μ˜ˆμ™Έλ₯Ό λ˜μ§€κ²Œ λ˜μ–΄λ„ μ†ŒμŠ€ ν˜Έν™˜μ„±κ³Ό λ°”μ΄λ„ˆλ¦¬ ν˜Έν™˜μ„±μ΄ κ·ΈλŒ€λ‘œ μœ μ§€λœλ‹€λŠ”κ²Œ 큰 μ΄μœ λ‹€.

μ™ΈλΆ€ 클래슀λ₯Ό μ‚¬μš©ν•  경우, 비검사 μ˜ˆμ™Έλ₯Ό λͺ¨λ‘ λ¬Έμ„œν™” ν–ˆλ‹€ 해도 μ™ΈλΆ€ ν΄λž˜μŠ€κ°€ μƒˆλ‘œμš΄ 비검사 μ˜ˆμ™Έλ₯Ό λ˜μ§€κ²Œ μˆ˜μ •λœλ‹€λ©΄ 아무 μˆ˜μ •λ„ ν•˜μ§€ μ•Šμ€ 우리 λ©”μ„œλ“œλŠ” λ¬Έμ„œμ— μ–ΈκΈ‰λ˜μ§€ μ•Šμ€ μƒˆλ‘œμš΄ 비검사 μ˜ˆμ™Έλ₯Ό μ „νŒŒν•˜κ²Œ λœλ‹€.

ν•œ ν΄λž˜μŠ€μ— μ •μ˜λœ λ§Žμ€ λ©”μ„œλ“œκ°€ 같은 이유둜 같은 μ˜ˆμ™Έλ₯Ό λ˜μ§„λ‹€λ©΄ κ·Έ μ˜ˆμ™Έλ₯Ό (각각의 λ©”μ„œλ“œκ°€ μ•„λ‹Œ) 클래슀 μ„€λͺ…에 μΆ”κ°€ν•˜λŠ” 방법도 μžˆλ‹€

예λ₯Ό λ“€μ–΄ λ§Žμ€ λ©”μ„œλ“œκ°€ NullPointerException 을 λ˜μ§„λ‹€λ©΄ 클래슀 상단 주석에 '이 클래슀의 λͺ¨λ“  λ©”μ„œλ“œλŠ” 인수둜 null이 λ„˜μ–΄μ˜€λ©΄ NullPointerException 을 λ˜μ§„λ‹€' 라고 μ“°λŠ” 식이닀.

핡심정리

λ©”μ„œλ“œκ°€ 던질 κ°€λŠ₯성이 μžˆλŠ” λͺ¨λ“  μ˜ˆμ™Έλ₯Ό λ¬Έμ„œν™”ν•˜λΌ. μ΄λŠ” κ²€μ‚¬μ˜ˆμ™Έ, λΉ„κ²€μ‚¬μ˜ˆμ™Έ μΆ”μƒλ©”μ„œλ“œ, κ΅¬μ²΄λ©”μ„œλ“œ λͺ¨λ‘ λ§ˆμ°¬κ°€μ§€μ΄λ‹€. μžλ°”λ…μ˜ @throws νƒœκ·Έλ₯Ό μ΄μš©ν•˜μž. 검사 μ˜ˆμ™Έλ§Œ λ©”μ„œλ“œμ˜ throws 문에 일일히 μ„ μ–Έν•˜κ³  λΉ„κ²€μ‚¬μ˜ˆκ΄΄λŠ” λ©”μ„œλ“œμ— 직접 κΈ°μž…ν•˜μ§€ 말자. μ˜ˆμ™Έλ₯Ό λ¬Έμ„œλ‘œ 남기지 μ•ŠμœΌλ©΄ λ‹€λ₯Έ μ‚¬λžŒμ΄ κ·Έ ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 효과적으둜 μ‚¬μš©ν•˜κΈ° μ–΄λ ΅κ±°λ‚˜ 심지어 λΆˆκ°€λŠ₯ν•  μˆ˜λ„ μžˆλ‹€.

⚠️ **GitHub.com Fallback** ⚠️