์๋
! ์ง๋ ์์
์์ ์ฐ๋ฆฌ๋ ์๋ฐ ์ธ์ด์ ์์ธ์ ๋ํด ์๊ฒ ๋์๊ณ ์์ธ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ํ ์๋ฅผ ๋ณด์์ต๋๋ค. ์ค๋ ์ฐ๋ฆฌ๋ ์์ธ์ ๊ตฌ์กฐ๋ฅผ ๋ ๊น์ด ์ดํด๋ณด๊ณ ์ฐ๋ฆฌ ์์ ์ ์์ธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ๊ฒ์
๋๋ค :)
์์ธ ์ ํ
์ด์ ์ ๋งํ๋ฏ์ด Java์๋ ๊ฑฐ์ 400๊ฐ์ ๊ฐ๊น์ด ๋ง์ ์์ธ๊ฐ ์์ต๋๋ค! ํ์ง๋ง ๊ทธ๊ฒ๋ค์ ๋ชจ๋ ๊ทธ๋ฃน์ผ๋ก ๋๋์ด์ ธ ์์ด์ ๊ธฐ์ตํ๊ธฐ๊ฐ ์๋นํ ์ฝ์ต๋๋ค. ๋ชจ๋ ์์ธ ๋ ํด๋์ค ์์ ๊ณตํต ์กฐ์์ ๊ฐ์ง๋๋คThrowable
. ์ฌ๊ธฐ์์ ์์ธ( Exception ) ๋ฐ ์ค๋ฅ( Error )๋ผ๋ ๋ ๊ฐ์ง ์ฃผ์ ๊ทธ๋ฃน์ด ํ์๋ฉ๋๋ค. ์ค๋ฅ - JVM(Java Virtual Machine) ์๋๊ณผ ๊ด๋ จ๋ ์ฌ๊ฐํ ๋ฐํ์ ์ค๋ฅ๋ฅผ ๋ํ๋
๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ค๋ฅ๋ ์ฝ๋์ ์ฌ๊ฐํ ๊ฒฐํจ์ด ์์์ ๋ํ๋ด๋ฏ๋ก ์ฒ๋ฆฌํ ํ์๊ฐ ์์ต๋๋ค. ์ด ์ค ๊ฐ์ฅ ์ ๋ช
ํ ๊ฒ์ StackOverflowError (์๋ฅผ ๋ค์ด ๋ฉ์๋๊ฐ ๋์์ด ์์ ์ ํธ์ถํ ๋ ๋ฐ์) ๋ฐ OutOfMemoryError ์
๋๋ค.(๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ์ฌ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ ๋ ๋ฐ์ํฉ๋๋ค.) ๋ณด์๋ค์ํผ ์ด๋ฌํ ์ํฉ์์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฐํ์์ ์ฒ๋ฆฌํ ๊ฒ์ด ์ ํ ์์ต๋๋ค. ์ฝ๋๋ ๋จ์ํ ์๋ชป ์์ฑ๋์ด ์ฌ์์
์ด ํ์ํฉ๋๋ค. ์์ธ - ์ด๊ฒ์ ์์ธ๋ฅผ ๋ํ๋
๋๋ค. ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ ๋ฐ์ํ๋ ์์ธ์ ์ด๊ณ ๊ณํ๋์ง ์์ ์ํฉ์
๋๋ค. ์ค๋ฅ๋งํผ ์ฌ๊ฐํ์ง๋ ์์ง๋ง ์ฌ์ ํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํฉ๋๋ค. ๋ชจ๋ ์์ธ๋ 2๊ฐ์ง ์ ํ์ผ๋ก ๋๋ฉ๋๋ค: checked ๋ฐ unchecked . ๋ชจ๋ ํ์ธ๋ ์์ธ๋ ํด๋์ค์์ ํ์๋ฉ๋๋ค Exception
. "checked"์(๋) ๋ฌด์จ ๋ป์ธ๊ฐ์? ์ง๋ ์์
์์ ์ด์ ๋ํด ์ธ๊ธํ์ต๋๋ค. "๋ฐ๋ผ์ Java ์ปดํ์ผ๋ฌ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์์ธ์ ์ด๋ฌํ ์์ธ๊ฐ ๋ฐ์ํ ์ ์๋ ์ํฉ์ ์๊ณ ์์ต๋๋ค." ์๋ฅผ ๋ค์ด ์ฝ๋๊ฐ ํ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ฉด ํ์ผ์ด ์ฝ๊ฒ ์กด์ฌํ์ง ์์ ์ ์์์ ์๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฌํ ์ํฉ(์ถ๋ก ํ ์ ์์)์ด ๋ง์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ์ปดํ์ผ๋ฌ๋ ์ด๋ฌํ ์ ์ฌ์ ์์ธ๊ฐ ์๋์ง ๋ฏธ๋ฆฌ ์ฝ๋๋ฅผ ํ์ธํฉ๋๋ค. ๊ทธ๊ฒ๋ค์ ์ฐพ์ผ๋ฉด ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ๋ค์ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋ค์ ๋์ง ๋๊น์ง ์ฝ๋๋ฅผ ์ปดํ์ผํ์ง ์์ ๊ฒ์
๋๋ค. ๋ ๋ฒ์งธ ์์ธ ์ ํ์ "ํ์ธ๋์ง ์์"์
๋๋ค. ํด๋์ค ์์ ํ์๋ฉ๋๋ค RuntimeException
. ํ์ธ๋ ์์ธ์ ์ด๋ป๊ฒ ๋ค๋ฆ
๋๊น? ์์ ํ์๋ ๋ค์ํ ํด๋์ค๋ ๋ง์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.RuntimeException
(๋ฐํ์ ์์ธ๋ฅผ ์ค๋ช
ํจ). ์ฐจ์ด์ ์ ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ฌํ ์ค๋ฅ๋ฅผ ์์ํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค. "์ฝ๋๋ฅผ ์์ฑํ ๋ ์์ฌ์ค๋ฌ์ด ์ ์ ์ฐพ์ง ๋ชปํ์ง๋ง ์คํํ๋ ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ถ๋ช
ํ ์ฝ๋์ ์ค๋ฅ๊ฐ ์์ต๋๋ค!" ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ์ด๊ฒ์ ์ฌ์ค์
๋๋ค. ํ์ธ๋์ง ์์ ์์ธ๋ ๋๋ถ๋ถ ํ๋ก๊ทธ๋๋จธ ์ค๋ฅ์ ๊ฒฐ๊ณผ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ปดํ์ผ๋ฌ๋ ๋ถ๋ช
ํ ์ฌ๋๋ค์ด ์์ ์ ์์ผ๋ก ๋ง๋ค ์ ์๋ ๋ชจ๋ ๊ฐ๋ฅํ ๋์ ์ํฉ์ ์์ธกํ ์ ์์ต๋๋ค. :) ๋ฐ๋ผ์ ์ด๋ฌํ ์์ธ๊ฐ ์ฐ๋ฆฌ ์ฝ๋์์ ์ฒ๋ฆฌ๋๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค. ํ์ธ๋์ง ์์ ๋ช ๊ฐ์ง ์์ธ๊ฐ ์ด๋ฏธ ๋ฐ์ํ์ต๋๋ค.
- 0์ผ๋ก ๋๋๋ฉด ArithmeticException์ด ๋ฐ์ํฉ๋๋ค.
- ๋ฐฐ์ด ์ธ๋ถ ์์น์ ์ก์ธ์คํ๋ ค๊ณ ํ๋ฉด ArrayIndexOutOfBoundsException์ด ๋ฐ์ํฉ๋๋ค.
try-catch
๋๋๊ธฐ ์ฐ์ฐ์ ๊ฒฝ์ฐ ์ค์๋ก 0์ผ๋ก ๋๋์๋์ง ํ์ธํ๊ธฐ ์ํด ๋ธ๋ก์ ์์ฑํด์ผ ํฉ๋๊น ? try-catch
๋ฐฐ์ด์ ์ก์ธ์คํ ๋๋ง๋ค ์ธ๋ฑ์ค๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ๋์ง ํ์ธํ๊ธฐ ์ํด ๋ธ๋ก์ ์์ฑํด์ผ ํฉ๋๋ค . ๋ชจ๋ ๊ฒ์ด ์คํ๊ฒํฐ ์ฝ๋์ผ ๊ฒ์ด๊ณ ์์ ํ ์ฝ์ ์ ์์ ๊ฒ์
๋๋ค. ์ด ์์ด๋์ด๊ฐ ๋ฒ๋ ค์ก๋ค๋ ๊ฒ์ ์ด์น์ ๋ง์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ํ์ธ๋์ง ์์ ์์ธ๋ ๋ธ๋ก์์ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋ค์ throwํ ํ์๊ฐ ์์ต๋๋ค try-catch
(Error์ ๊ฐ์ด ๊ธฐ์ ์ ์ผ๋ก ๊ฐ๋ฅํ์ง๋ง).
์์ ์ ์์ธ๋ฅผ ๋์ง๋ ๋ฐฉ๋ฒ
๋ฌผ๋ก Java ์ ์์๊ฐ ํ๋ก๊ทธ๋จ์์ ๋ฐ์ํ ์ ์๋ ๋ชจ๋ ์์ธ์ ์ธ ์ํฉ์ ์์ธกํ ์๋ ์์ต๋๋ค. ์ธ์์๋ ๋๋ฌด ๋ง์ ํ๋ก๊ทธ๋จ์ด ์๊ณ ๋๋ฌด ๋ค์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์ํ ๊ฒฝ์ฐ ๊ณ ์ ํ ์์ธ๋ฅผ ๋ง๋ค ์ ์์ผ๋ฏ๋ก ๊ฑฑ์ ํ ์ฌํญ์ด ์๋๋๋ค. ์ด๊ฒ์ ๋งค์ฐ ์ฝ์ต๋๋ค. ์์ ๋ง์ ํด๋์ค๋ฅผ ์์ฑํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ด๋ฆ์ด "Exception"์ผ๋ก ๋๋๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ปดํ์ผ๋ฌ์๋ ์ด๊ฒ์ด ํ์ํ์ง ์์ง๋ง ์ฝ๋๋ฅผ ์ฝ๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋จธ๋ ์์ธ ํด๋์ค์์ ์ฆ์ ์ดํดํ ๊ฒ์ ๋๋ค. ๋ํ ํด๋์ค๊ฐException
ํด๋์ค์์ ์์๋จ์ ๋ํ๋
๋๋ค(์ปดํ์ผ๋ฌ์์ ์ด๋ฅผ ์๊ตฌํจ). ์๋ฅผ ๋ค์ด ํด๋์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค Dog
. ์ฐ๋ฆฌ๋ ๋ค์์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฅผ ์ฐ์ฑ
์ํฌ ์ ์์ต๋๋ค.walk()
๋ฐฉ๋ฒ. ํ์ง๋ง ๊ทธ ์ ์ ์ฐ๋ฆฌ๋ ์ ์๋๋ฌผ์ด ๋ชฉ์ค, ๋ชฉ์ค, ์
๋ง๊ฐ๋ฅผ ์ฐฉ์ฉํ๊ณ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ด ์ฅ๋น ์ค ๋๋ฝ๋ ๊ฒ์ด ์์ผ๋ฉด ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค: DogIsNotReadyException . ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
public class DogIsNotReadyException extends Exception {
public DogIsNotReadyException(String message) {
super(message);
}
}
ํด๋์ค๊ฐ ์์ธ์์ ํ์ํ๋ ค๋ฉด ํด๋์ค ์ด๋ฆ ๋ค์ " extends Exception " ์ ์์ฑํด์ผ ํฉ๋๋ค (์ด๋ "ํด๋์ค๊ฐ Exception ํด๋์ค์์ ํ์๋จ"์ ์๋ฏธํจ). ์์ฑ์์์ Exception
String ๋ฉ์์ง ๋ก ํด๋์ค ์์ฑ์๋ฅผ ํธ์ถํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค(์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์ค๋ฅ์ ๋ํ ์ค๋ช
๋ฉ์์ง๋ฅผ ์ฌ์ฉ์์๊ฒ ํ์ํจ). ํด๋์ค ์ฝ๋์์ ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
public class Dog {
String name;
boolean isCollarPutOn;
boolean isLeashPutOn;
boolean isMuzzlePutOn;
public Dog(String name) {
this.name = name;
}
public static void main(String[] args) {
}
public void putCollar() {
System.out.println("The collar is on!");
this.isCollarPutOn = true;
}
public void putLeash() {
System.out.println("The leash is on!");
this.isLeashPutOn = true;
}
public void putMuzzle() {
System.out.println("The muzzle is on!");
this.isMuzzlePutOn = true;
}
public void walk() throws DogIsNotReadyException {
System.out.println("We're getting ready for a walk!");
if (isCollarPutOn && isLeashPutOn && isMuzzlePutOn) {
System.out.println("Hooray, let's go for a walk! " + name + " is very happy!");
} else {
throw new DogIsNotReadyException(name + " is not ready for a walk! Check the gear!");
}
}
}
์ด์ ์ฐ๋ฆฌ ๋ฉ์๋๋ DogIsNotReadyExceptionwalk()
์ ๋์ง๋๋ค . ์ด๊ฒ์ throw ํค์๋๋ก ์ํ๋ฉ๋๋ค. ์์์ ๋งํ๋ฏ์ด ์์ธ๋ ๊ฐ์ฒด์
๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ ๋ฉ์๋์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด(๊ฐ๊ฐ ๋ฌด์ธ๊ฐ๋ฅผ ๋์น๊ณ ์์) ํค์๋ throw๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๋์ง๋๋ค. ๋ฉ์๋ ์ ์ธ์ " throws DogIsNotReadyException "์ ์ถ๊ฐํฉ๋๋ค . ์ฆ, ์ด์ ์ปดํ์ผ๋ฌ๋ ๋ฉ์๋ ํธ์ถ์ด ์์ธ์ ์ธ ์ํฉ์ด ๋ ์ ์์์ ์ธ์ํฉ๋๋ค. ๋ฐ๋ผ์ ํ๋ก๊ทธ๋จ ์ด๋๊ฐ์์ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ด ์์ธ๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ๋ฉ์๋ ์์ ์ด๊ฒ์ ํด๋ณด์ : DogIsNotReadyException
walk()
main()
public static void main(String[] args) {
Dog dog = new Dog("Buddy");
dog.putCollar();
dog.putMuzzle();
dog.walk();// Unhandled exception: DogIsNotReadyException
}
์ด๊ฒ์ ์ปดํ์ผ๋์ง ์์ต๋๋ค. ์์ธ๊ฐ ์ฒ๋ฆฌ๋์ง ์์ต๋๋ค! try-catch
์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ๋ธ๋ก์ผ๋ก ๋ํํฉ๋๋ค .
public static void main(String[] args) {
Dog dog = new Dog("Buddy");
dog.putCollar();
dog.putMuzzle();
try {
dog.walk();
} catch (DogIsNotReadyException e) {
System.out.println(e.getMessage());
System.out.println("Checking the gear! Is the collar on? " + dog.isCollarPutOn + "\r\n Is the leash on? "
+ dog.isLeashPutOn + "\r\n Is the muzzle on? " + dog.isMuzzlePutOn);
}
}
์ด์ ์ฝ์ ์ถ๋ ฅ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. The collar is on! ์ด๊ตฌ๊ฐ ์ผ์ ธ ์์ต๋๋ค! ์ฐ๋ฆฌ๋ ์ฐ์ฑ
์ ์ค๋นํ๊ณ ์์ต๋๋ค! ๋ฒ๋๋ ์ฐ์ฑ
ํ ์ค๋น๊ฐ ๋์ด ์์ง ์์ต๋๋ค! ๊ธฐ์ด๋ฅผ ํ์ธํ์ธ์! ๊ธฐ์ด ํ์ธ! ์นผ๋ผ๊ฐ ์ผ์ ธ ์์ต๋๊น? ๊ฐ์ฃฝ ๋์ด ์ผ์ ธ ์์ต๋๊น? false ์ด๊ตฌ๊ฐ ์ผ์ ธ ์์ต๋๊น? true ์ฝ์ ์ถ๋ ฅ์ด ์ผ๋ง๋ ๋ ์ ์ตํ์ง ๋ณด์ญ์์ค! ์ฐ๋ฆฌ๋ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ๋จ๊ณ๋ฅผ ๋ด
๋๋ค. ์ฐ๋ฆฌ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์์น๋ฅผ ํ์ธํ๊ณ ์ฐ๋ฆฌ ๊ฐ์์ง๊ฐ ๋ฌด์์ ๋์น๊ณ ์๋์ง ์ฆ์ ํ์ธํ ์ ์์ต๋๋ค. :) ์ด๊ฒ์ด ๋ฐ๋ก ์์ ๋ง์ ์์ธ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์
๋๋ค. ๋ณด์๋ค์ํผ ๋ณต์กํ ๊ฒ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Java์ ์ ์์๊ฐ ์ฅ๋น๊ฐ ๋ถ์กฑํ ๊ฐ์ ๋ํ ํน๋ณํ ์์ธ๋ฅผ ์ธ์ด์ ํฌํจํ์ง ์์์์๋ ๋ถ๊ตฌํ๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๋ค์ ๊ฐ๋
์ ์์ ํ์ต๋๋ค. :)
๋ ์ฝ์ด๋ณด๊ธฐ: |
---|
GO TO FULL VERSION