Skip to content

Commit

Permalink
add: πŸ“° [Item 71] ν•„μš” μ—†λŠ” 검사 μ˜ˆμ™Έ μ‚¬μš©μ€ ν”Όν•˜λΌ
Browse files Browse the repository at this point in the history
  • Loading branch information
Shinminjin committed May 18, 2024
1 parent 496d6a8 commit 903a59d
Showing 1 changed file with 59 additions and 0 deletions.
59 changes: 59 additions & 0 deletions _posts/effective-java/chapter10/2024-05-19-item71.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
---
title: Item 71 - ν•„μš” μ—†λŠ” 검사 μ˜ˆμ™Έ μ‚¬μš©μ€ ν”Όν•˜λΌ
date: 2024-05-19 00:50:00 +0900
categories: [μ΄νŽ™ν‹°λΈŒ μžλ°”, chapter10]
tags: [μ΄νŽ™ν‹°λΈŒ μžλ°”]
---

검사 μ˜ˆμ™Έλ₯Ό μ œλŒ€λ‘œ ν™œμš©ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ˜ μ•ˆμ •μ„±κ³Ό μ§ˆμ„ 높일 수 μžˆλ‹€.

## **검사 μ˜ˆμ™Έλ₯Ό κ³Όν•˜κ²Œ μ‚¬μš©ν•˜λ©΄ πŸ€”**

- 검사 μ˜ˆμ™ΈλŠ” ν˜ΈμΆœμžκ°€ μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” κ°•μ œμ„±μ„ μ§€λ‹ˆκΈ° λ•Œλ¬Έμ— 뢀담을 μ€€λ‹€.
- `try-catch`둜 μ²˜λ¦¬ν•˜κ±°λ‚˜ `throws`λ₯Ό 던져 문제λ₯Ό μ „νŒŒν•΄μ•Ό ν•œλ‹€.
- 검사 μ˜ˆμ™Έλ₯Ό λ˜μ§€λŠ” λ©”μ„œλ“œλŠ” 슀트림 μ•ˆμ—μ„œ 직접 μ‚¬μš©ν•  수 μ—†μ–΄μ„œ [*item 45~48*] 뢀담을 μ€€λ‹€.
- 특히, λ©”μ„œλ“œκ°€ 단 ν•˜λ‚˜μ˜ 검사 μ˜ˆμ™Έλ§Œ 던질 λ•Œ 뢀담이 크닀.
- κ·Έ μ˜ˆμ™Έ ν•˜λ‚˜ λ•Œλ¬Έμ— API μ‚¬μš©μžλŠ” try 블둝을 μΆ”κ°€ν•΄μ•Ό ν•˜κ³ , μŠ€νŠΈλ¦Όμ—μ„œλŠ” μ‚¬μš© λͺ»ν•˜κ²Œ λœλ‹€.
- 이런 상황에선 검사 μ˜ˆμ™Έλ₯Ό μ•ˆ 던질 방법이 μ—†λŠ”μ§€ κ³ λ―Όν•΄λ³΄μž.

## **검사 μ˜ˆμ™Έ νšŒν”Ό 방법 😎**

### **(1) μ˜΅μ…”λ„**

- μ μ ˆν•œ κ²°κ³Ό νƒ€μž…μ„ 담은 μ˜΅μ…”λ„μ„ λ°˜ν™˜ν•˜λŠ” 것이 검사 μ˜ˆμ™Έλ₯Ό νšŒν”Όν•˜λŠ” κ°€μž₯ μ‰¬μš΄ 방법이닀.
- 검사 μ˜ˆμ™Έλ₯Ό λ˜μ§€λŠ” λŒ€μ‹  λ‹¨μˆœνžˆ 빈 μ˜΅μ…”λ„μ„ λ°˜ν™˜ν•˜λ©΄ λœλ‹€.
- κ·ΈλŸ¬λ‚˜ 이 방식은 μ˜ˆμ™Έκ°€ λ°œμƒν•œ 이유λ₯Ό μ•Œλ €μ£ΌλŠ” 뢀가정보λ₯Ό 담을 수 μ—†λ‹€λŠ” 단점이 μžˆλ‹€.
- μ˜ˆμ™Έλ₯Ό μ‚¬μš©ν•˜λ©΄, ꡬ체적인 μ˜ˆμ™Έ νƒ€μž…κ³Ό λ©”μ„œλ“œλ₯Ό ν™œμš©ν•΄ 뢀가정보λ₯Ό 담을 수 μžˆλ‹€.

### **(2) λ©”μ„œλ“œ μͺΌκ°œκΈ°**

검사 μ˜ˆμ™Έλ₯Ό λ˜μ§€λŠ” λ©”μ„œλ“œλ₯Ό 2개둜 μͺΌκ°œ 비검사 μ˜ˆμ™Έλ‘œ λ°”κΏ€ 수 μžˆλ‹€.

```java
// 검사 μ˜ˆμ™Έλ₯Ό λ˜μ§€λŠ” λ©”μ„œλ“œ - λ¦¬νŒ©ν„°λ§ μ „
try {
obj.action(args);
} catch (TheCheckedException e) {
... // μ˜ˆμ™Έ 상황에 λŒ€μ²˜ν•œλ‹€.
}
```

```java
// μƒνƒœ 검사 λ©”μ„œλ“œμ™€ 비검사 μ˜ˆμ™Έλ₯Ό λ˜μ§€λŠ” λ©”μ„œλ“œ - λ¦¬νŒ©ν„°λ§ ν›„
if(obj.actionPermitted(args)) {
obj.action(args);
} else {
... // μ˜ˆμ™Έμƒν™©μ— λŒ€μ²˜ν•œλ‹€.
}
```
- λͺ¨λ“  상황에 μ μš©ν•  수 μžˆλŠ” λ¦¬νŒ©ν„°λ§μ€ μ•„λ‹ˆλ‹€.
- λ˜ν•œ, μƒνƒœ 검사 λ©”μ„œλ“œμ˜ 단점도 κ·ΈλŒ€λ‘œ μ μš©λœλ‹€. - *item 69*
- μ™ΈλΆ€ 동기화 없이 μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μ ‘κ·Όν•  수 μžˆκ±°λ‚˜ μ™ΈλΆ€ μš”μΈμ— μ˜ν•΄ μƒνƒœκ°€ λ³€ν•  수 μžˆλ‹€λ©΄ 이 λ¦¬νŒ©ν„°λ§μ€ μ μ ˆν•˜μ§€ μ•Šλ‹€.
- μƒνƒœ 검사 λ©”μ„œλ“œ(`actionPermitted`)κ°€ μƒνƒœ 의쑴적 λ©”μ„œλ“œ(`action`)의 μž‘μ—… 일뢀λ₯Ό 쀑볡 μˆ˜ν–‰ν•œλ‹€λ©΄ μ„±λŠ₯μ—μ„œ μ†ν•΄μ΄λ―€λ‘œ, 이 λ¦¬νŒ©ν„°λ§μ΄ μ μ ˆν•˜μ§€ μ•Šμ„ 수 μžˆλ‹€.

## **πŸ’‘ 핡심 정리**

- κΌ­ ν•„μš”ν•œ κ³³μ—μ„œλ§Œ 검사 μ˜ˆμ™Έλ₯Ό μ‚¬μš©ν•˜μž.
- API ν˜ΈμΆœμžκ°€ μ˜ˆμ™Έ μƒν™©μ—μ„œ 볡ꡬ할 방법이 μ—†λ‹€λ©΄ 비검사 μ˜ˆμ™Έλ₯Ό λ˜μ§€μž.
- 볡ꡬ가 κ°€λŠ₯ν•˜κ³  ν˜ΈμΆœμžκ°€ κ·Έ 처리λ₯Ό ν•΄μ£ΌκΈΈ λ°”λž€λ‹€λ©΄ μ˜΅μ…”λ„ λ°˜ν™˜μ„ κ³ λ―Όν•˜μž.
- μ˜΅μ…”λ„λ§ŒμœΌλ‘œ 상황을 μ²˜λ¦¬ν•˜κΈ°μ— μΆ©λΆ„ν•œ 정보λ₯Ό μ œκ³΅ν•  수 없을 λ•Œλ§Œ 검사 μ˜ˆμ™Έλ₯Ό λ˜μ§€μž.

0 comments on commit 903a59d

Please sign in to comment.