2023. 2. 3. 15:22ใJAVA/Effective JAVA
item13. clone ์ฌ์ ์๋ ํญ์ ์ฃผ์ํด์ ์งํํ๋ผ.
" p80. ๋น๊ฒ์ฌ ์์ธ(Unchecked Exception) ์์ด์ผ ํ๋ค๋ ์ ํธ๋ค."
UncheckedException
public class MyException extends RuntimeException
{
}
public class MyApp
{
public void hello()
{
System.out.println("hello");
throw new MyException();
}
}
public static void main(String[] args)
{
MyApp myApp = new MyApp();
myApp.hello();
}
-> UncheckedException์ ์ฌ์ฉํ๋ฉด CheckedException์ ๋นํด ์ปดํ์ผ ์๋ฌ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๊ณ , try-catch๋ก ๊ฐ์ธ๊ฑฐ๋ ๋ฉ์๋ ์ ์ธ๋ถ์ ์ ์ธํ์ง ์์๋ ๋๋ค.
CheckedException์ ๋นํ๋ฉด ํธ๋ฆฌํ๋ค. ๊ทผ๋ฐ ๋จ์ํ ์ฒ๋ฆฌํ๊ธฐ ์ฝ๊ณ ํธํ๋ค๋ ์ด์ ๋ง์ผ๋ก UncheckedExcetpion(RuntimeException) ์ ์ ํํ๋ฉด ์๋๋ค.
๊ทธ๋ ๋ค๋ฉด UncheckedException๋ง ์ฌ์ฉํ๋ฉด ๋ ํ ๋ฐ CheckedException๊ฐ ์๋ ์ด์ ๋ ๋ญ๊น?
CheckedException
public class MyCheckedException extends Exception
{
}
public void hello(String name) throws MyCheckedException
{
if (name.equals("noUse")) {
throw new MyCheckedException();
}
}
try
{
myApp.hello("noUse");
}
catch (MyCheckedException e)
{
throw new RuntimeException(e);
}
CheckedException์ ์ฌ์ฉํ๋ฉด ํด๋น ์ฝ๋๋ฅผ ์ฌ์ฉํ ๋ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉฐ try-catch๋ก ์ก๊ฑฐ๋ ๋์ง๊ฑฐ๋ ํด์ผํ๋ค.
CheckedException๋ ์ด ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ์๊ฒ ํด๋น ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์์ ์๋ ค์ค ์ ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ ๋ณต๊ตฌํ ์ ์์ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
๋ฐ๋๋ก UnCheckedException ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ณต๊ตฌํ ์ ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
์ฑ ์์ ๋์๋ 'CloneNotSupportedException์ด ์ฌ์ค์ ๋น๊ฒ์ฌ ์์ด์ผ ํ๋ค๋ ์ ํธ๋ค. ' ๋ ๋ณด๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ค ์กฐ์น๋ฅผ ์ทจํ ์ ์๋ ์ํฉ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๐พ ์ก์ง ์์ ์์ธ๋ฅผ ๋ฉ์๋์ ์ ์ธํ๋ ์ด์ ?
-> ๋ฉ์๋์ ์ ์ธํ ์์ธ๋ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค์ ์ผ๋ถ๋ก ํด๋น ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๊ฐ ๋ฐ๋์ ์์์ผ ํ๋ ์ ๋ณด์ด๋ค.
์๋ํ๋ฉด ๊ทธ๋์ผ ํด๋น ์์ธ๊ฐ ๋ฐ์ํ์ ์ํฉ์ ๋์ฒํ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
-> ๊ทผ๋ฐ UncheckedException์ ์ ๋ฉ์๋์ ์ ์ธํ์ง ์์๋ ๋๋๊ฐ ํ๋ฉด UncheckedException๋ ์ด๋ค ์์ผ๋ก๋ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋ณต๊ตฌํ ์ ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ ์์ธ(์ซ์๋ฅผ 0์ผ๋ก ๋๋๋ค, NULL ๋ ํผ๋ฐ์ค์ ๋ฉ์๋๋ฅผ ํธ์ถ ๋ฑ..) ์ธ๋ฐ ์ด๋ฐ ์์ธ๋ ํ๋ก๊ทธ๋จ ์ ๋ฐ์ ๊ฑธ์ณ ์ด๋์๋ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ UncheckedException์ ๋ฉ์๋์ ์ ์ธํ๋๋ก ๊ฐ์ ํ๋ค๋ฉด ํ๋ก๊ทธ๋จ์ ๋ช ํ๋๊ฐ ๋จ์ด์ง๊ธฐ ๋๋ฌธ์ด๋ค.
๐ ๊ทธ๋ ๋ค๋ฉด ์ธ์ CheckedException์ ์ฌ์ฉํ๊ณ , UncheckedException์ ์ฌ์ฉํ๋๊ฐ?
ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ์์ธ ์ํฉ์ ๋ณต๊ตฌํ ์ ์๋ค๋ฉด ๊ฒ์ฌ ์์ธ๋ฅผ ์ฌ์ฉํ๊ณ , ํด๋น ์์ธ๊ฐ ๋ฐ์ํ์ ๋ ์๋ฌด๊ฒ๋ ํ ์ ์๋ค๋ฉด ๋น๊ฒ์ฌ ์์ธ๋ก ๋ง๋ ๋ค!