์์ธ ๋ฐ์์ํค๊ธฐ
1. ์ฐ์ฐ์ new๋ฅผ ์ด์ฉํด์ ๋ฐ์์ํค๋ ค๋ ์์ธ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค์
Exception e = new Exception(" ๊ณ ์๋ก ๋ฐ์์์ผฐ์ ");
2. ํค์๋ throw๋ฅผ ์ด์ฉํด์ ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค.
throw e;
์ ์์ try๋ฌธ์์ Exception e= new Exception()์ ํตํด ์์ธ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค์ ํค์๋ throw๋ฅผ ์ด์ฉํด์ ์์ธ๋ฅผ ๋ฐ์ํ๋ค.
๊ทธ๋ฌ๋ฉด catch๋ธ๋ญ์์ ๊ฐ์ฒด์ ๋์ผํ ์์ธ๋ฅผ ์ก์ผ๋ฉด ๊ณ ์๋ก ๋ฐ์ํ ์์ธ๋ฅผ catch์์ ์ฒ๋ฆฌํ ์ ์๋ค.
์ด๋ ๊ฒ ๋ ๋ฌธ์ฅ์ ํ ๋ฌธ์ฅ์ผ๋ก ํฉ์น๋ฉด throw new Exception("๊ณ ์๋ก ๋ฐ์์์ผฐ์.");์ด ๋๋ค.
checked์์ธ, unchecked์์ธ
checked์์ธ (Exception๊ณผ ๊ทธ ์์) : ์ปดํ์ผ๋ฌ๊ฐ ์์ธ ์ฒ๋ฆฌ ์ฌ๋ถ๋ฅผ ์ฒดํฌ(์์ธ ์ฒ๋ฆฌ ํ์)
unchecked์์ธ (RuntimeException๊ณผ ๊ทธ ์์) : ์ปดํ์ผ๋ฌ๊ฐ ์์ธ ์ฒ๋ฆฌ ์ฌ๋ถ๋ฅผ ์ฒดํฌ ์ ํจ(์์ธ ์ฒ๋ฆฌ ์ ํ)
์ฌ๊ธฐ์ checked์์ธ๋ Exceptionํด๋์ค์ ์์๋ค์ ์๋ฏธํ๊ณ ,
unchecked์์ธ๋ RuntimeExceptionํด๋์ค์ ์์๋ค์ ์๋ฏธํ๋ค.
์ ์์ ๋ฅผ ์คํ์ ํ๊ฒ๋๋ฉด ์ปดํ์ผ์กฐ์ฐจ ๋์ง ์๋๋ค.
์ด๋ ๊ฒ Exception์์ธ๋ ํ์๋ก try-catch๋ฌธ์ ํตํด ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ๋๋ฐ ์ฒ๋ฆฌํ๋ catch๋ฌธ์ด ์๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ์ด ์๋๋ค.
๋ฐ๋ฉด์ RuntimeException์์ธ๋ ์คํ์ ๋์ง๋ง ์ค๋ฅ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋น์ ์ ์ข ๋ฃ๊ฐ ๋๋ค.
์ ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ํ์คํ checked, unchecked๋ฅผ ๊ตฌ๋ณํ ์ ์๋ค.
๋ฉ์๋์ ์์ธ ์ ์ธํ๊ธฐ
์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ : try-catch๋ฌธ, ์์ธ ์ ์ธํ๊ธฐ
์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์๋ ๋ ๊ฐ์ง๋ก try-catch๋ฌธ๊ณผ ์์ธ ์ ์ธํ๊ธฐ๊ฐ ์๋ค.
์ง๊ธ ์์๋ณผ ์์ธ ์ ์ธํ๊ธฐ๋ ์์ธ ๋ ๋๊ธฐ๊ธฐ(์๋ฆฌ๊ธฐ)๋ก ์ดํดํ ์ ์๋ค.
๋ฉ์๋๊ฐ ํธ์ถ ์ ๋ฐ์ ๊ฐ๋ฅํ ์์ธ๋ฅผ ํธ์ถํ๋ ์ชฝ์ ์๋ฆฌ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์ฝค๋ง(,)๋ฅผ ๊ตฌ๋ถ์ ๋ก ์ด ๋ฉ์๋๋ฅผ ์คํํ์ ๋ ๋ฐ์ํ ์ ์๋ ์ฌ๋ฌ ๊ฐ์ง ์์ธ๋ฅผ ์๋ฆด ์ ์๋ค.
๊ทธ๋ฌ๋ฉด ๊ทธ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ชฝ์์๋ ๋ฐ์ํ ์ ์๋ ์์ธ๋ค์ ๋ํ try-catch๋ฌธ์ ์์ฑํด์ผ ํ๋ค.
๋ ๋ฒ์งธ ๋ฉ์๋ ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ์์ธ์ ์กฐ์์ธ Exception์ ์ ์ธํ๊ณ ์๋ค.
์ค๋ฒ ๋ผ์ด๋ฉ์ ์กฐ๊ฑด์ผ๋ก ์ ์ธ๋ถ ์ผ์น, ์ ๊ทผ์ ์ด์ ์ข๊ฒ X, ์กฐ์๋ณด๋ค ๋ง์ ์์ธ ์ ์ธ X ๊ฐ ์๋ค.
์ ๋ ๋ฉ์๋๋ฅผ ๊ฒ์ผ๋ก ๋ณด๊ธฐ์๋ ์ฒซ ๋ฒ์งธ ๋ฉ์๋๊ฐ ๋ ๋ฒ์งธ ๋ฉ์๋๋ณด๋ค ์์ธ๋ฅผ ๋ ๋ง์ด ์ ์ธํ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง,
๋ ๋ฒ์งธ ๋ฉ์๋๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ์์ธ๋ฅผ ํฌํจํ๋ Exception์ ์ ์ธํ๊ณ ์๊ธฐ ๋๋ฌธ์
์ญ์ค์ ์ผ๋ก ๋๋ฒ์งธ ๋ฉ์๋๊ฐ ๋ ๋ง์ ๊ฒ์ด๋ค.
์ ์ด๋ฏธ์ง๋ ์๋ฐ API๋ฌธ์์์ wait์ด๋ผ๋ ๋ฉ์๋๋ฅผ ์ฐพ์๋ณธ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ Throws๋ฅผ ์ดํด๋ณด๋ฉด wait์ด๋ผ๋ ๋ฉ์๋๋ฅผ ์คํํ์ ๋ ๋ ๊ฐ์ง ์์ธ๊ฐ ๋ฐ์ํ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
ํ์ง๋ง ํ์๋ก ์ ์ธํด์ผ ํ๋ ์์ธ๋ก๋ InterruptedException๋ง ์ ์ธํ๋ผ๊ณ ๋์ด์๋ค.
๋ฐ์ํ ์ ์๋ ์์ธ๋ ๋ ๊ฐ์ง์ธ๋ฐ ํ์๋ก ์ ์ธํด์ผ ํ๋ ์์ธ๋ ํ ๊ฐ์ง์ธ ์ด์ ๋ก๋
IllegalMonitorStateEexception์ RuntimeException์ ์์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
RuntimeException์ unchecked์ด๊ธฐ ๋๋ฌธ์ ์์ธ์ฒ๋ฆฌ๊ฐ ์ ํ์ ์ด๋ค.
ํ์ง๋ง InterruptedException์ Exception์ ์์์ด๊ธฐ ๋๋ฌธ์ checked๋ก ์์ธ์ฒ๋ฆฌ๊ฐ ํ์์ ์ด๋ค.
์ ์์ ๋ฅผ ํ์ธํ๋ฉด main๋ฉ์๋๊ฐ method1์ ํธ์ถํ๊ณ , method1์ method2๋ฅผ ํธ์ถํ๋ค.
method2์์ ์์ธ๊ฐ ๋ฐ์์ ํ๊ณ method2๋ method1์๊ฒ ์์ธ๋ผ๋ ํญํ์ ๋์ก๋ค.
method1์ main์๊ฒ ์์ธ ํญํ์ ๋์ง๊ณ , main๋ฉ์๋์๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ try-catch๋ฌธ์ด ์์ผ๋,
JVM(Java Virtual Machine)์ ์์ธ๋ฅผ ๋์ก๋ค.
๊ทธ๋ ๊ฒ JVM์ ์ํด์ ์ถ๋ ฅ๋ ๊ฐ์ด ์ ์์ ์ ๊ฒฐ๊ณผ๊ฐ์ด๋ค.
์ ์์ ๋ฅผ ํ์ธํ๋ฉด ์ข ๋ ํ์คํ๊ฒ ์ดํดํ ์ ์๋ค.
์๊ท๋จผํธ(args) ๊ฐ์ผ๋ก ๋ฌธ์๋ฅผ ์ ๋ ฅํ๋ฉด ํด๋น ๋ฌธ์๋ก ๋ ํ์ผ์ ์์ฑํด์ฃผ๋ ์์ ์ด๋ค.
ํ์ง๋ง ์๊ท๋จผํธ ๊ฐ์ด ์๊ฑฐ๋(Null), ๊ณต๋ฐฑ์ด๋ผ๋ฉด(" ") ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค.
์ฒ์ f๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ createfile๋ฉ์๋๋ ์๋์ผ๋ก ์คํ์ด ๋๋ค.
๊ทธ๋ผ ์๊ท๋จผํธ ๊ฐ์ด ๊ณต๋ฐฑ์ด๊ฑฐ๋ ์๋์ง if๋ฌธ์ ํตํด ํ์ธ์ ํ๊ณ true๋ผ๋ฉด
์์ธ๋ฅผ ๋ฐ์์ํจ๋ค. createFile๋ฉ์๋๋ ์์ธ๋ฅผ ์ ์ธํ๊ธฐ ๋๋ฌธ์, ๋ฉ์๋๋ฅผ ํธ์ถํ main๋ฉ์๋๋ก ์์ธ๋ฅผ ๋๊ธฐ๊ฒ ๋๋ค.
์์ธ๋ฅผ ๋ฐ์ main๋ฉ์๋๋ catch๋ธ๋ญ์ ํตํด ๋ค์ ์ ๋ ฅ์ ํด๋ฌ๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ์ ํ๊ฒ ๋๋ค.
๋ํ, catch๋ธ๋ญ์ ์์ธ๊ฐ ๋ฐ์ํ createFile๋ฉ์๋์์ ์ฒ๋ฆฌํ ์๋ ์์ผ๋ฉฐ,
์์ธ๋ฅผ ๋ฐ์ํ ๊ณณ์์ ์ฒ๋ฆฌํ ์ง, ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ณณ์์ ์ฒ๋ฆฌํ ์ง๋ ์ ํ๋จํ๊ณ ๊ฒฐ์ ํด์ผ ํ๋ค.
finally๋ธ๋ญ
finally๋ธ๋ญ์ ์์ธ ๋ฐ์์ฌ๋ถ์ ๊ด๊ณ์์ด ์ํ๋์ด์ผ ํ๋ ์ฝ๋๋ฅผ ๋ฃ๋๋ค.
finally๋ธ๋ญ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ์ฝ๋์ ๊ฐ๋ค.
์ ์์ ๋ฅผ ํ์ธํด๋ณด๋ฉด try๋ธ๋ญ์์ deleteTempFiles();๋ฅผ ํตํด ์์ํ์ผ์ ์ญ์ ํ๋ ๋ฉ์๋๊ฐ ์๋ค.
ํ์ง๋ง startInstall();์ด๋ copyFiles();์์ ์์ธ๊ฐ ๋ฐ์ํ๋ค๋ฉด deleteTempFiles()๊ฐ ์คํํ์ง ์๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก catch๋ธ๋ญ์์ deleteTempFiles()๋ฅผ ๋ค์ ์ ์ด์ฃผ์ด์ผ ํ๋ค.
ํ์ง๋ง, ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ฝ๋์ ์ค๋ณต์ด ๋ฐ์ํ๊ฒ ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์ธ ๋ฐ์๊ณผ ์๊ด์์ด ์คํํ๋ ์ฝ๋์ธ finally๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
์ด๋ ๊ฒ ์์ ์ด ์ฑ๊ณตํ๋ ์คํจํ๋ ํด์ค์ผ ํ๋ ๋ง๋ฌด๋ฆฌ ์์ ์ finally์ ๋ฃ์ผ๋ฉด ๋๋ค.