๊นจ๋ํ ์ฝ๋์ ์ค๋ฅ ์ฒ๋ฆฌ๋ ํ์คํ ์ฐ๊ด์ฑ์ด ์๋ค. ํ์ง๋ง ์ค๋ฅ ์ฒ๋ฆฌ๋ก ์ธํด ํ๋ก๊ทธ๋จ ๋ ผ๋ฆฌ๋ฅผ ์ดํดํ๊ธฐ ์ด๋ ค์ค์ง๋ค๋ฉด ๊นจ๋ํ ์ฝ๋๊ฐ ์๋๋ค.
์ค๋ฅ๋ณด๋ค ์์ธ๋ฅผ ์ฌ์ฉํ๋ผ
์์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์์ธ๋ฅผ ์ง์ํ์ง ์์๋ค. ์ด ๋๋ฌธ์, ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ ํ์ ์ผ ์ ๋ฐ์ ์์๋ค.
- error flag๋ฅผ ์ค์ ํ๋ค.
- error code๋ฅผ ๋ฆฌํดํ๋ค.
- ํธ์ถํ๋ ์ธก์์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
์ด๋ฐ ๋ฐฉ์์ผ๋ก๋ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์๊ธฐ ์ฝ๊ฒํ๊ณ ๋ ผ๋ฆฌ๊ฐ ์์ด์ด ํท๊ฐ๋ฆฌ๊ธฐ ์ฝ๋ค.
์์ธ๋ฅผ ํธ์ถํ๋ ํจ์๋ฅผ ์์ ๋ถ๋ฆฌํ์ฌ ๋
ผ๋ฆฌ ์ฝ๊ธฐ๊ฐ ์ฌ์์ก๋ค. ๋๋ฐ์ด์ค๋ฅผ ์ข
๋ฃํ๋ ์๊ณ ๋ฆฌ์ฆ (tryToShutDown()
)๊ณผ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ์๊ณ ๋ฆฌ์ฆ getHandle()
์ด ๋ถ๋ฆฌ๋์๋ค.
Try-Catch-Finally ๋ฌธ๋ถํฐ ์์ฑํ๋ผ
try-catch ๋ฌธ์ ํน์ง๋ถํฐ ์ดํด๋ณด์. ์ด๋ ์์ ์๋นํ ํฅ๋ฏธ๋ก์ด ๋ ์์ด๋ค. ๊ทธ ์ด์ ๋, try ๋ธ๋ก์์ ๋ค์ด๊ฐ๋ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ด๋ ์์ ์๋ ์คํ์ ์ค๋จํ ํ catch ๋ธ๋ก์ผ๋ก ๋์ด๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฌํ ํน์ง์ ๊ณง transection๊ณผ ๋น์ทํ ์ ์ด๋ผ ํ ์ ์๋ค. ์ด๋ค try๋ฌธ์ด๋ ์ง๊ฐ์ ์๊ด์์ด ํด๋น ๋ธ๋ก์์์ ์ผ๊ด๋ ์ํ๋ก ์ ์งํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๋ธ๋ก์ด ์คํ๋๊ธฐ ์ ๊ณผ ํ์ ๋์ฌ ์ ์๋ ๊ฒฐ๊ณผ๊ฐ ์ ํ๋๋ค.
๋จผ์ , error๋ฅผ ๋ฐ์ํ๋์ง ํ ์คํธํ๊ธฐ ์ํ ํจ์๋ฅผ ๋ง๋ค์. ๊ทธ๋ฆฌ๊ณ , ์ด ํจ์์ ๊ป๋ฐ๊ธฐ๋ฅผ ๋ง๋ค์ด์ ํด๋น ํ ์คํธ๊ฐ ์คํจํ๋๋ก ๋ง๋ค์.
์ด์ ์คํจํ ํ ์คํธ๋ฅผ ํต๊ณผ์ํค๊ธฐ ์ํด ๋ด๋ถ ๊ตฌํ์ ์๋ํ์. throw๋ฅผ ๋์ง๊ธฐ ๋๋ฌธ์ ์ด์ ์์ test ํจ์๋ ํต๊ณผํ๋ค.
๋ง์ง๋ง์ผ๋ก ์๋ฌ์ ๋ฒ์๋ฅผ ์ค์ด์. FileNotFoundException
์ผ๋ก ๋ฒ์๋ฅผ ์ค์๋ค. ์ด๋ ๊ฒ ๊ฐ์ ๋ก ์์ธ๋ฅผ ์ผ์ผํค๋ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ ํ ํ
์คํธ๋ฅผ ํต๊ณผํ๋ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๊ฒ ๋๋ฉด try ๋ธ๋ก์ transection ๋ฒ์๋ด์์ ๊ตฌํํ๊ฒ ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฝ๋์ ๋ณธ์ง์ ๋ฒ์ด๋์ง ์๋๋ก ํ ์ ์๋ค.
๋ฏธํ์ธ ์์ธ๋ฅผ ์ฌ์ฉํ๋ผ
ํด๋น ๋จ์ ์ดํดํ๊ธฐ ์ํด์๋ Checked Exception๊ณผ Unchecked Exception์ ๋ํ ์ ์๋ถํฐ ์๊ณ ๊ฐ์ผ ํ๋ค.
Checked Exception | Unchecked Exception | |
---|---|---|
์ฌ์ด ์ดํด | ๊ผญ ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ํ๋ ์์ธ (๋ก์ง์ ์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ํจ) | ๊ผญ ์ฒ๋ฆฌํ์ง ์์๋ ๋๋ ์์ธ (๊ฐ๋ฐ์ ๋ถ์ฃผ์) |
ํ์ธ ์์ | ์ปดํ์ผ ํ์ | ๋ฐ ํ์ |
์์ธ ๋ฐ์์ ํธ๋์ญ์ ์ฒ๋ฆฌ | Roll-back O | Roll-back X |
์์ | Exception ์์ ํ์ ํด๋์ค ์ค Runtime Exception์ ์ ์ธํ ๋
์๋ค - IOException - SQLException | RuntimeException - NullPointerException - IndexOutOfBoundException - SystemException |
์์๋ฅผ ๋ณด๋ฉด ๊ฐ๋จํ ์ดํดํ ์ ์๋ค. ๋ช ํํ๊ฒ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ๋ฅผ Checked Exception, ๊ฐ๋ฐ์ ๋ถ์ฃผ์, system์ ์ผ๋ก ๋ฐ์ํ๋ ์์ธ๋ฑ์ Unchecked Exception์ด๋ผ ํ๋ค.
์ด๋ฌํ ๋งฅ๋ฝ์์ ์ ์๋ ์ด๋ ํ ์ฃผ์ฅ์ ๊ฐ์ง๊ณ ์์๊น? ์ด์ java์์ ์ฒ์์ผ๋ก Exception์ด ๋์์ ๋๋ ๋ฉ์ง๋ค๊ณ ์๊ฐํ๋ค. ์ด ๋๋ฌธ์, ๋ฉ์๋๊ฐ ๋ฐํํ๋ ์์ธ๋ฅผ ๋ชจ๋ ์ด๊ฑฐํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ํ์ง๋ง ์์ ์ ์ธ ์ํํธ์จ์ด๋ฅผ ์ ์ํ๋ ์์๋ก Checked Exception์ด ๋ฐ๋์ ํ์ํ์ง๋ ์๋ค๋ ์ฌ์ค์ด ๋ถ๋ช ํด์ก๋ค. ์คํ๋ ค ์ฐ๋ฆฌ๊ฐ ์๊ฐํด์ผ ํ๋ ๊ฒ์ Checked exception์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์น๋ฅด๋ ๋น์ฉ์ ์๊ฐํด๋ณด์์ผ ํ๋ค.
์ด๋ค ๋น์ฉ์ด ๋๋์ง ์๊ฐํด๋ณด์.
null
- ํน์ ๋ฉ์๋์์ checked exception์ throwํ๊ณ
- 3๋จ๊ณ(๋ฉ์๋ ์ฝ) ์์ ๋ฉ์๋์์ ๊ทธ exception์ catchํ๋ค๋ฉด
- ๋ชจ๋ ์ค๊ฐ๋จ๊ณ ๋ฉ์๋์ exception์ ์ ์ํด์ผ ํ๋ค.(์๋ฐ์ ๊ฒฝ์ฐ ๋ฉ์๋ ์ ์ธ์ throws ๊ตฌ๋ฌธ์ ๋ถ์ด๋ ๋ฑ)
์ด๋ ์ฐ์์ ์ธ ์์ ์ ํด์ผํ๊ธฐ ๋๋ฌธ์ OCP(Open Closed Principle)์ ์๋ฐํ๋ค. ์์ ๋ ๋ฒจ ๋ฉ์๋์์ ํ์ ๋ ๋ฒจ ๋ฉ์๋์ ๋ํ ์ผ์ ๋ํด ์์์ผ ํ๊ธฐ ๋๋ฌธ์ ์บก์ํ๋ ๊นจ์ง๋ค.
์์ธ์ ์๋ฏธ๋ฅผ ์ ๊ณตํ๋ผ
ํธ์ถ ์คํ์ด ์ด๋ฌํ ๋งฅ๋ฝ์ ์ ๊ณตํ๊ธฐ๋ ํ์ง๋ง, ์ด ์ ๋๋ฅผ ๋ถ์ถฉ๋ถํ๋ค. ์์ธ๊ฐ ๋ฐ์ํ ์ด์ ์ ์ข ๋ ๊ตฌ์ฒด์ ์ธ Exception Type์ ํตํด ์ดํดํ๊ธฐ ํธํ๋๋ก ํด๋ผ.
ํธ์ถ์๋ฅผ ๊ณ ๋ คํด ์์ธ ํด๋์ค๋ฅผ ์ ์ํ๋ผ
Exception class๋ฅผ ๋ง๋ค ๋ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ โ์ด๋ค ๋ฐฉ์์ผ๋ก ์์ธ๋ฅผ ์ฒ๋ฆฌํ ๊นโ์ด๋ค. ์ด ๊ณผ์ ์์ Third Party library๋ฅผ ์ฌ์ฉํ๊ณ , ์ฌ๊ธฐ์ ๋์ง๋ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ค๋ฉด, wrapping ํ์ฌ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ต์ฒด ๋ฑ์ ๋ณ๊ฒฝ์ ๋์ํ๊ธฐ ์ฝ๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐ๋ ๊ณณ์ ํ ์คํธํ๋ ๊ฒฝ์ฐ, ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ง๋ก ๋ง๋ค์ด ํ ์คํธํ๊ธฐ ์ฌ์์ง๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ API ๋์์ธ์ ๊ด๊ณ์์ด ๋ด ํ๋ก๊ทธ๋จ์ ๋ง๋๋ก ์ ์ ํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
์ ์ ํ๋ฆ์ ์ ์ํ๋ผ
์ง๊ธ๊น์ง ๋ณธ ๋ฐฉ์์ผ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ํ๊ฒ๋๋ฉด ๊น๋ํ ์ฝ๋๋ฅผ ๋ณด์ฅํ ์ ์๋ค. ํ์ง๋ง catch๋ฌธ์์ ์์ธ์ ์ธ ์ํฉ์ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ ์คํ๋ ค ๋๋ฌ์์ง๋ค. ์ ๋ง ์์ธ์ธ์ง ๊ธฐ๋ณธ๋ก์ง์ ํธ์ ํด์ผ ํ๋์ง ํ๋จํ๋ ์ต๊ด์ ๊ฐ์ ธ์ผ ํ๋ค.
์ฝ๋๋ฅผ ๋ถ๋ฅด๋ ์ ์ฅ์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ์ํฉ์ ์ ๊ฒฝ์จ์ผ ํ๋ค. ์๋์ ๊ฐ์ด ์บก์ํ๋ฅผ ํ๋ค๋ฉด ์ ๊ฒฝ์ธ ํ์๊ฐ ์์ด์ง๋ค.
null์ ๋ฐํํ์ง ๋ง๋ผ
null์ ๋ฆฌํดํ๊ณ ์ถ์ ์๊ฐ์ด ๋ค๋ฉด ์์์ ์ค๋ช ํ special case object๋ฅผ ๋ฆฌํดํ์. third party ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ null์ ๋ฆฌํดํ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด Exception์ ๋์ง๋ ๋ฐฉํฅ์ผ๋ก ์ฒ๋ฆฌํ๊ฑฐ๋ special case object๋ฅผ ๋ฆฌํดํ๋ ๋ฉ์๋๋ก ๋ํํ์.
์ฌ๊ธฐ์ null ์ฒดํฌ๋ฅผ ๋ชปํ ๋ถ๋ถ์์ ๋ฌธ์ ๊ฐ ์๊ธด๋ค๋ฉด ์ฐพ๊ธฐ๊ฐ ๋๋ฌด ํ๋ค๋ค. ๋น์ฅ ์์๋ง ๋ณด์๋ peristentStore๊ฐ null์ธ ๊ฒฝ์ฐ์ ๋ํ ์์ธ์ฒ๋ฆฌ๊ฐ ์๋๋ค!! ๋ง์ฝ์ null์ธ ์ํ๋ก ์๋ ๋ก์ง์ ๋ฐ๋ผ๊ฐ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น? NullPointerException๊ฐ ๋ฐ์ํ ๊ฑฐ๊ณ ์ด๋ฅผ ์ฒ๋ฆฌํด์ค์ผ ํ๋ค.์ด๋์ ํด์ค๊น? ์์ญ๋จ๊ณ ์์ ๋ฉ์๋์์ ์ฒ๋ฆฌํด์ค์ผ ํ๋? ์ด ๋ฉ์๋์ ๋ฌธ์ ์ ์ null ์ฒดํฌ๊ฐ ๋ถ์กฑํ๊ฒ ์๋๋ผ null์ฒดํฌ๊ฐ ๋๋ฌด ๋ง๋ค๋ ๊ฒ์ด๋ค.
null์ ์ ๋ฌํ์ง ๋ง๋ผ
null์ ๋ฐํํ๋ ๊ฒ๋ ๋์์ง๋ง, null์ ๋ฉ์๋๋ก ๋๊ธฐ๋ ๊ฒ์ ๋ ๋์๋ค. null์ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด์ผ ํ๋ API๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด null์ ๋ฉ์๋๋ก ๋๊ธฐ์ง ๋ง์. ๋๋ค์์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ ํ๋ผ๋ฏธํฐ๋ก ๋ค์ด์จ null์ ๋ํด ์ ์ ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง ๋ชปํ๋ค. ์์๋ฅผ ๋ณด๋ฉด ์ดํด๊ฐ ๊ฐ๋ฅํ๋ค.
๊ฒฐ๋ก
๊นจ๋ํ ์ฝ๋๋ ์ฝ๊ธฐ๋ ์ข์์ผ ํ์ง๋ง, ์์ ์ฑ๋ ๋์์ผ ํ๋ค. ์ด ๋๊ฐ๋ Trade-Off๊ฐ ์๋๋ค.
- Exception์ ํ์ฉํ์.
- Try-Catch๋ฌธ์ ๋จผ์ ์์ฑํ๊ณ ๋ก์ง์ ๋ฃ์.
- ์ง๋์น unchecked exception์ ์ข์ง ์๋ค.
- Exception์ ์ฌ์ฉํ ์, ์ด์ ์ Type์ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์ด๋ผ.
- ์ฌ์ฉ์ ๋ง๊ฒ(third party library) Exception์ wrappingํ๋ผ.
- Exception์ ๋จ๋ฐํ๊ธฐ๋ณด๋ค ์ ์์ ์ธ ์ํฉ์ ์ ์ํ์ฌ ์ฒ๋ฆฌํ ์ ์๋ค๋ฉด ๊ทธ๋ ๊ฒ ํ๋ผ.
- Null์ ๋ฆฌํดํ์ง๋, ๋๊ธฐ์ง๋ ๋ง๋ผ.