π§© νμ΅ λ¨μ : μμΈμ²λ¦¬(Exception Handling)
π νμ΅ λμ : <Javaμ μ μ 3ν>(λ¨κΆ μ± μ )
βμ€λ΅ μ 리 μλ£(2022.01.22)
[8-1] μμΈμ²λ¦¬μ μ μμ λͺ©μ μ λν΄μ μ€λͺ νμμ€. β
μμΈμ²λ¦¬(exception handling)λ λ°μν μ μλ μμΈμ λλΉν΄ μ½λλ₯Ό μμ±νλ κ²μ΄λ€. μ΄λ₯Ό ν΅ν΄ νλ‘κ·Έλ¨μ λΉμ μμ μΈ μ’ λ£λ₯Ό λ§κ³ μ μ μ€ν μνλ₯Ό μ μ§νλλ‘ νλ€.
μμΈλ ν¬κ² checked exceptionκ³Ό unchecked exceptionμΌλ‘ λλ λ³Ό μ μλ€.
[8-2] λ€μμ μ€νλμ€ μμΈκ° λ°μνμ¬ νλ©΄μ μΆλ ₯λ λ΄μ©μ΄λ€. μ΄μ λν μ€λͺ μ€ μ³μ§ μμ κ²μ? β
stack κ΅¬μ‘°λ‘ λ μ¬λ €μΌ νλ€. main → method1 → method2 μμΌλ‘ μμΈ κ²μ΄λ€.
java.lang.ArithmeticException : / by zero
γγat ExceptionEx18.method2(ExceptionEx18.java:12)
γγat ExceptionEx18.method1(ExceptionEx18.java:8)
γγat ExceptionEx18.main(ExceptionEx18.java:4)
a. μμ λ΄μ©μΌλ‘ μμΈκ° λ°μνμ λΉμ νΈμΆμ€νμ μ‘΄μ¬νλ λ©μλλ₯Ό μ μ μλ€. OK. printStackTrace() ꡬ문.
b. μμΈκ° λ°μν μμΉλ method2 λ©μλμ΄λ©°, ExceptionEx18.javaνμΌμ 12λ²μ§Έ μ€μ΄λ€.
c. λ°μν μμΈλ ArithmeticExceptionμ΄λ©°, 0μΌλ‘ λλμ΄μ μμΈκ° λ°μνλ€. OK. μ μλ₯Ό 0μΌλ‘ λλ΄μ λ λ°μ
d. method2λ©μλκ° method1λ©μλλ₯Ό νΈμΆνμκ³ κ·Έ μμΉλ ExceptionEx18.javaνμΌμ 8λ²μ§Έ μ€μ΄λ€.
[8-3] λ€μ μ€ μ€λ²λΌμ΄λ©μ΄ μλͺ»λ κ²μ? (λͺ¨λ κ³ λ₯΄μμ€) ββ
μμν΄λμ€μμ λμ§ μμΈμ μλ μ‘°μν΄λμ€μμ λμ§ μμΈμ μ κ±°λ κ°μμΌ νλ€.
λ, Exception, NumberExceptionμ κ°μλ 1κ°μΌμ§λΌλ μμΈ μ€ μ‘°μμ ν΄λΉν΄ μ·¨κΈνλ μμΈλ€μ΄ νμ ν λ§λ€. λ°λΌμ μ€λ²λΌμ΄λ©μ μ€λ₯μ ν΄λΉνλ€.
void add(int a, int b)
γγthrows InvalidNumberException, NotANumberException {}
class NumberException extends Exception {}
class InvalidNumberException extends NumberException {}
class NotANumberException extends NumberException {}
a. void add(int a, int b) throws InvalidNumberException, NotANumberException {}
b. void add(int a, int b) throws InvalidNumberException {}
c. void add(int a, int b) throws NotANumberException {}
d. void add(int a, int b) throws Exception {}
e. void add(int a, int b) throws NumberException {}
[8-4] λ€μκ³Ό κ°μ λ©μλκ° μμ λ, μμΈλ₯Ό μλͺ» μ²λ¦¬ν κ²μ? (λͺ¨λ κ³ λ₯΄μμ€) β
void method() throws InvalidNumberException, NotANumberException {}
class NumberException extends RuntimeException {}
class InvalidNumberException extends NumberException {}
class NotANumberException extends NumberException {}
a. try {method();} catch(Exception e) {}
b. try {method();} catch(NumberException e) {} catch(Exception e) {}
c. try {method();} catch(Exception e) {} catch(NumberException e) {} μμμμΈκ° λ¨Όμ μμΌ ν¨
d. try {method();} catch(InvalidNumberException e) {
γγγγγγγ } catch(NotANumberException e) {}
e. try {method();} catch(NumberException e) {}
f. try {method();} catch(RuntimeException e) {}
[8-5] μλμ μ½λκ° μνλμμ λμ μ€νκ²°κ³Όλ₯Ό μ μΌμμ€. ββ
trueμΌ λ 1 / 3 / 5
falseμΌ λ 1/ 2 / 5 / 6
class Exercise8_5 {
γγstatic void method(boolean b) {
γγγγtry {
γγγγγγSystem.out.println(1);
γγγγγγif(b) throw new ArithmeticException();
γγγγγγSystem.out.println(2);
γγγγ} catch(RuntimeException r) {
γγγγγγSystem.out.println(3);
γγγγγγreturn;
γγγγ} catch(Exception e) {
γγγγγγSystem.out.println(4);
γγγγγγreturn;
γγγγ} finally {
γγγγγγSystem.out.println(5);
γγγγ}
γγγγSystem.out.println(6);
γγ}
γγpublic static void main(String[] args) {
γγγγmethod(true);
γγγγmethod(false);
γγ}
}
[8-6] μλμ μ½λκ° μνλμμ λμ μ€νκ²°κ³Όλ₯Ό μ μΌμμ€. ββ
method2()μ NullPointerExceptionμ μ²λ¦¬ν΄μ€ catchλΈλμ΄ μλ€. λ°λΌμ mathod2()λ μ’ λ£, μ΄μ΄μ method1()μμλ λ§λ ν catchλΈλμ΄ μμΌλ―λ‘ finallyꡬ문 3λ§ μ€νν μ± μ’ λ£, λμκ° mainλ©μλλ Exceptionμ catchλΈλμμ μ²λ¦¬ν μ μμΌλ―λ‘ 5κ° μΆλ ₯λκ³ μ’ λ£λλ€.
class Exercise8_6 {
γγpublic static void main(String[] args) {
γγγγtry {
γγγγγγmethod1();
γγγγ} catch(Exception e) {
γγγγγγSystem.out.println(5);
γγγγ}
γγ}
γγstatic void method1() {
γγγγtry {
γγγγγγmethod2();
γγγγγγSystem.out.println(1);
γγγγ} catch(ArithmeticException e) {
γγγγγγSystem.out.println(2);
γγγγ} finally {
γγγγγγSystem.out.println(3);
γγγγ}
γγγγSystem.out.println(4);
γγ}
γγstatic void method2() {
γγγγthrow new NullPointerException();
γγ}
}
[8-7] μλμ μ½λκ° μνλμμ λμ μ€νκ²°κ³Όλ₯Ό μ μΌμμ€. β
trueμΌ λ 1 / ... κ°μ μ’ λ£
System.exit(0);μ΄ μ½νλ μ¦μ κ°μ μ’ λ£λλ€. μ΄νμ ꡬ문μ μΆλ ₯λ μ μλ€.
class Exercise8_7 {
γγstatic void method(boolean b) {
γγγγtry {
γγγγγγSystem.out.println(1);
γγγγγγif(b) System.exit(0);
γγγγγγSystem.out.println(2);
γγγγ} catch(RuntimeException r) {
γγγγγγSystem.out.println(3);
γγγγγγreturn;
γγγγ} catch(Exception e) {
γγγγγγSystem.out.println(4);
γγγγγγreturn;
γγγγ} finally {
γγγγγγSystem.out.println(5);
γγγγ}
γγγγSystem.out.println(6);
γγ}
γγpublic static void main(String[] args) {
γγγγmethod(true);
γγγγmethod(false);
γγ}
}
[8-8] λ€μμ 1~100μ¬μ΄μ μ«μλ₯Ό λ§μΆλ κ²μμ μ€ννλ λμ€μ μ«μκ° μλ μλ¬Έμλ₯Ό λ£μ΄μ λ°μν μμΈμ΄λ€. μμΈμ²λ¦¬λ₯Ό ν΄μ μ«μκ° μλ κ°μ μ λ ₯νμ λλ λ€μ μ λ ₯μ λ°λλ‘ λ³΄μνλΌ. β
1κ³Ό 100 μ¬μ΄μ κ°μ μ λ ₯νμΈμ : 100
λ μμ μλ₯Ό μ λ ₯νμΈμ.
1κ³Ό 100 μ¬μ΄μ κ°μ μ λ ₯νμΈμ : 20
λ μμ μλ₯Ό μ λ ₯νμΈμ.
1κ³Ό 100 μ¬μ΄μ κ°μ μ λ ₯νμΈμ : hello
μ ν¨νμ§ μμ κ°μ λλ€. λ€μ μ λ ₯ν΄ μ£ΌμΈμ.
1κ³Ό 100 μ¬μ΄μ κ°μ μ λ ₯νμΈμ :
package com.reminder.exercises;
import java.util.Scanner;
public class Ex08 {
public static void main(String[] args) {
int answer = (int)(Math.random() * 100) + 1;
int input = 0;
int count = 0;
do {
count++;
System.out.print("1κ³Ό 100 μ¬μ΄μ κ°μ μ
λ ₯νμΈμ : ");
try {
input = new Scanner(System.in).nextInt();
} catch(Exception e) {
System.out.println("μ ν¨νμ§ μμ κ°μ
λλ€. λ€μ μ
λ ₯ν΄ μ£ΌμΈμ.");
continue;
}
if(answer > input) {
System.out.println("λ ν° μλ₯Ό μ
λ ₯νμΈμ.");
} else if(answer < input) {
System.out.println("λ μμ μλ₯Ό μ
λ ₯νμΈμ.");
} else {
System.out.println("μ λ΅μ
λλ€.");
System.out.println("μ΄ μλνμλ " + count + "λ²μ
λλ€.");
break;
}
} while(true);
}
}
[8-9] λ€μκ³Ό κ°μ 쑰건μ μμΈν΄λμ€λ₯Ό μμ±νκ³ ν μ€νΈνμμ€. ββ
νΉν messageλ μμ λ°μ κ²μ΄κΈ°μ μμ±μ ν΅ν΄ μ΄κΈ°νλμ΄μΌ νλ€: super(message);
μ¬κΈ°μλ ERR_CODE λν μμ±μλ₯Ό ν΅ν΄ ν¨κ» μ΄κΈ°ννλλ‘ νλ€.
getMessage() λ©μλλ μ¬μ€ Exception.classμ getMessage()λ‘λΆν° μ€λ²λΌμ΄λ© ν΄μ¨ κ²μ΄λ€. λ°λΌμ μ‘°μν΄λμ€μμ μμ±ν λ©μλλ₯Ό μ¬νμ©νλ κ²μ΄ μ’λ€: super.getMessage();
......UnsupportedFunctionException: [100]μ§μνμ§ μλ κΈ°λ₯μ λλ€.
package com.reminder.exercises;
public class Ex09 {
public static void main(String[] args) throws Exception {
throw new UnsupportedFunctionException("μ§μνμ§ μλ κΈ°λ₯μ
λλ€.", 100);
}
}
class UnsupportedFunctionException extends RuntimeException {
final private int ERR_CODE;
public UnsupportedFunctionException(String message, int errCode) {
super(message);
ERR_CODE = errCode;
}
public UnsupportedFunctionException(String message) {
this(message, 100);
}
public int getErrorCode() {
return ERR_CODE;
}
public String getMessage() {
return "[" + getErrorCode() + "]" + super.getMessage();
}
}
[8-10] μλμ μ½λκ° μνλμμ λμ μ€νκ²°κ³Όλ₯Ό μ μΌμμ€. β
2 4 7
class Exercise8_10 {
γγpublic static void main(String[] args) {
γγγγtry {
γγγγγγmethod1();
γγγγγγSystem.out.println(6); μμΈκ° λ°μν΄μ μ€νλμ§ μλλ€.
γγγγ} catch(Exception e) {
γγγγγγSystem.out.println(7);
γγγγ}
γγ}
γγstatic void method1() throws Exception {
γγγγtry {
γγγγγγmethod2();
γγγγγγSystem.out.println(1);
γγγγ} catch(NullPointerException e) {
γγγγγγSystem.out.println(2);
γγγγγγthrow e; μμΈλ₯Ό λ€μ λ°μμν¨λ€. μμΈ λλμ§κΈ°(re-throwing)
γγγγ} catch(Exception e) {
γγγγγγSystem.out.println(3);
γγγγ} finally {
γγγγγγSystem.out.println(4);
γγγγ}
γγγγSystem.out.println(5);
γγ}
γγstatic void method2() {
γγγγthrow new NullPointerException();
γγ}
}
'Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μλ°μ μ μ] Ch 9. API μμ μμ© νμ΅ (0) | 2022.01.23 |
---|---|
[μλ°μ μ μ] Ch 8. μμΈμ²λ¦¬ μμ μμ© νμ΅ (0) | 2022.01.22 |
[μλ°μ μ μ] Ch 7. OOP II μμ μμ© νμ΅ (0) | 2022.01.22 |
[μλ°μ μ μ] Ch 7. OOP II μ°μ΅λ¬Έμ νμ΄ (0) | 2022.01.16 |
[JAVA] 14-2. μ μΆλ ₯ | 보쑰 μ€νΈλ¦Ό | μ§λ ¬ν (0) | 2022.01.14 |