μμΈ μ²λ¦¬
λ°μν μμΈμ λν΄μ νλ‘κ·Έλ¨ μ½λλ‘ λμνλ κ²
INDEX
1.
μμΈ μ²λ¦¬
β’
μμΈ μ²λ¦¬ κ°λ
β’
λ¬Έλ² (try-catch-finally)
β’
μ£Όμ μμΈ ν΄λμ€
2.
μλ¬
β’
μ»΄νμΌ μλ¬
β’
λ°νμ μλ¬
β¦
μλ¬(Error)
β¦
μμΈ(Exception)
3.
μμΈ μ²λ¦¬ λ°©λ²
β’
κΈ°λ³Έ μμ
β’
λ€μ€ catch
β’
λ©ν° catch
β’
try-with-resources (AutoClose)
β’
μμΈ μ κ° (throws)
β’
μμΈ κ°μ λ°μ (throw)
β’
μ¬μ©μ μμΈ μ μ
μλ¬
μλ¬λ νλ‘κ·Έλ¨ μ€ν μ€ λ°μνλ μ€μλμΌλ‘, μ»΄νμΌ μλ¬μ λ°νμ μλ¬λ‘ ꡬλΆλ©λλ€. μ»΄νμΌ μλ¬λ μ½λ μμ± μ€λ₯λ‘ λ°μνκ³ , λ°νμ μλ¬λ μ€ν μ€ λ°μνλ μμ€ν
λ¬Έμ μ
λλ€.
β’
μλ¬
β¦
μ»΄νμΌ μλ¬ (Compile Error)
β¦
λ°νμ μλ¬ (Runtime Error)
βͺ
μλ¬ (Error)
βͺ
μμΈ (Exception)
1. μ»΄νμΌ μλ¬(Compile Error)
μ»΄νμΌνλ κ³Όμ μμ λ°μνλ μ€λ₯λ‘, μ΄ μ€λ₯κ° μμΌλ©΄ νλ‘κ·Έλ¨μ΄ μ€νλμ§ μμ΅λλ€.
β’
νΉμ§: νλ‘κ·Έλ¨ μ€ν λΆκ°
β’
μ£Όμ μμΈ:
β¦
νλ‘κ·Έλ¨ λ¬Έλ²μ λ§μ§ μλ μ½λ μμ±
β¦
μ€νλ¬Έ λμ ';' κΈ°νΈ λλ½
β¦
( ), { } κ΄νΈμ μ§μ΄ λ§μ§ μλ κ²½μ°
β¦
μ μΈνμ§ μμ λ³μ μ¬μ© λ±
2. λ°νμ μλ¬(Runtime Error)
νλ‘κ·Έλ¨ μ€ν κ³Όμ μμ λ°μνλ μ€λ₯μ
λλ€. λ°νμ μλ¬λ λ€μ λ κ°μ§λ‘ λλ μ μμ΅λλ€
2.1. μλ¬(Error)
JVM, H/W λ±μ μμ€ν
λ¬Έμ λ‘ μΈν΄ λ°μνλ μ€νμ€λ₯μ
λλ€.
β’
νΉμ§: 볡ꡬ λλ μ²λ¦¬ν μ μμ
β’
μμ: OutOfMemoryError, StackOverflowError λ±
β’
2.2. μμΈ(Exception)
μ¬μ©μμ μλͺ»μ΄λ κ°λ°μμ μλͺ»μΌλ‘ λ°μνλ μ€νμ€λ₯μ
λλ€.
β’
νΉμ§: 볡ꡬ λλ μ²λ¦¬ κ°λ₯ν¨ β μμΈ μ²λ¦¬(Exception Handling)
β’
ꡬλΆ: Checked Exception(μ»΄νμΌλ¬κ° 체ν¬), Unchecked Exception(Runtime Exception)
νλ‘κ·Έλ¨μ μμ μ±μ μν΄μλ λ°μ κ°λ₯ν μμΈλ₯Ό μ μ ν μ²λ¦¬νλ κ²μ΄ μ€μν©λλ€.
μμΈ μ²λ¦¬(Exception Handling)
λ°μν μμΈμ λν΄μ νλ‘κ·Έλ¨ μ½λλ‘ λμνλ κ²
μλ°μμλ μμΈκ° λ°μνλ©΄ νλ‘κ·Έλ¨μ΄ λΉμ μμ μΌλ‘ μ’
λ£λλ κ²μ λ°©μ§νκ³ , μ μμ μΈ μ€ν νλ¦μ μ μ§ν μ μλλ‘ ν©λλ€.
λ¬Έλ²
try {
// μμΈκ° λ°μν μ μλ μ½λ
} catch (ExceptionType1 e1) {
// ExceptionType1 μμΈ μ²λ¦¬ μ½λ
} catch (ExceptionType2 e2) {
// ExceptionType2 μμΈ μ²λ¦¬ μ½λ
} finally {
// νμ μ€νλλ μ½λ (μ νμ )
}
Java
볡μ¬
μ£Όμ μμΈ ν΄λμ€
ν΄λμ€λͺ
| μ€λͺ
|
NullPointerExceptoin | null μ κ°λ μ°Έμ‘° λ³μλ‘ μ κ·Ό μ°μ°μ(.)λ₯Ό μ¬μ©νμ λ λ°μνλ μμΈ |
ArrayIndexOutOfBoundsException | λ°°μ΄μμ λ²μλ₯Ό μ΄κ³Όν μΈλ±μ€λ‘ μ κ·Όν λ λ°μνλ μμΈ |
NumberFormatException | μ«μλ‘ λ³νν μ μλ λ¬Έμμ΄μ μ«μλ‘ λ³νν λ λ°μνλ μμΈ |
ClassCastException | λΆλͺ¨/μμ κ΄κ³κ° μλ ν΄λμ€ κ°μ κ°μ λ‘ νμ
λ³ν μ λ°μνλ μμΈ |
ArithmeticException | μ«μλ₯Ό 0μΌλ‘ λλλ λ±μ μ°μ μ°μ° κ΄λ ¨μ λ¬Έμ μ λ°μνλ μμΈ |
κΈ°λ³Έ μμ
λ€μμ μμΈ μ²λ¦¬μ κΈ°λ³Έμ μΈ μμλ€μ
λλ€:
β’
ClassCastException - νμ
λ³ν μμΈ
β’
ArithmeticException - 0μΌλ‘ λλμ
λ± μ°μ μ°μ° μμΈ
β’
IndexOutOfBoundsException - λ°°μ΄ λ²μ μ΄κ³Ό μμΈ
β’
InputMismatchException - μ
λ ₯ νμ λΆμΌμΉ μμΈ
β’
NumberFormatException - μ«μ λ³ν μμΈ
ClassCastException
try {
Object obj = Integer.valueOf(42);
String str = (String) obj; // ClassCastException λ°μ
} catch (ClassCastException e) {
System.out.println("νμ
λ³ν μ€λ₯: " + e.getMessage());
}
Java
볡μ¬
ArithmeticException (DivideByZero)
try {
int result = 10 / 0; // ArithmeticException λ°μ
} catch (ArithmeticException e) {
System.out.println("μ°μ μ°μ° μ€λ₯: " + e.getMessage());
}
Java
볡μ¬
IndexOutOfBoundsException
try {
int[] arr = new int[5];
arr[10] = 25; // IndexOutOfBoundsException λ°μ
} catch (IndexOutOfBoundsException e) {
System.out.println("λ°°μ΄ μΈλ±μ€ μ€λ₯: " + e.getMessage());
}
Java
볡μ¬
InputMismatchException
import java.util.Scanner;
import java.util.InputMismatchException;
try {
Scanner scanner = new Scanner(System.in);
System.out.print("μ«μλ₯Ό μ
λ ₯νμΈμ: ");
int num = scanner.nextInt(); // μ μκ° μλ κ° μ
λ ₯ μ InputMismatchException λ°μ
} catch (InputMismatchException e) {
System.out.println("μ
λ ₯ νμ μ€λ₯: μ μλ₯Ό μ
λ ₯ν΄μΌ ν©λλ€.");
}
Java
볡μ¬
NumberFormatException
try {
String str = "abc";
int num = Integer.parseInt(str); // NumberFormatException λ°μ
} catch (NumberFormatException e) {
System.out.println("μ«μ νμ μ€λ₯: " + e.getMessage());
}
Java
볡μ¬
λ€μ€ catch
μ¬λ¬ μμΈλ₯Ό κ°κ° λ€λ₯Έ catch λΈλ‘μμ μ²λ¦¬νλ κ²
λ€μν μμΈλ₯Ό κ°κ° λ€λ₯Έ λ°©μμΌλ‘ μ²λ¦¬νκ³ μ ν λ μ¬λ¬ κ°μ catch λΈλ‘μ μ¬μ©ν©λλ€.
try {
int[] arr = new int[5];
arr[10] = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("μ°μ μ°μ° μ€λ₯ λ°μ");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("λ°°μ΄ μΈλ±μ€ μ€λ₯ λ°μ");
} catch (Exception e) {
System.out.println("κΈ°ν μμΈ λ°μ: " + e.getMessage());
}
Java
볡μ¬
λ©ν° catch
β’
μλ‘ λ€λ₯Έ μμΈλ₯Ό νλμ catch λΈλ‘μμ λ¬Άμ΄μ μ²λ¦¬νλ κ²
Java 7λΆν° λμ
λ κΈ°λ₯μΌλ‘, λμΌν μ²λ¦¬κ° νμν μ¬λ¬ μμΈλ₯Ό νλμ catch λΈλ‘μμ μ²λ¦¬ν μ μμ΅λλ€.
try {
// μμΈ λ°μ κ°λ₯ μ½λ
} catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
System.out.println("μ°μ λλ λ°°μ΄ μΈλ±μ€ μ€λ₯: " + e.getMessage());
}
Java
볡μ¬
try-with-resources (AutoClose)
μμΈ μ²λ¦¬ ν, μ¬μ©λ 리μμ€ κ°μ²΄λ₯Ό μλμΌλ‘ λ©λͺ¨λ¦¬μμ ν΄μ νλ κΈ°λ²
Java 7λΆν° λμ
λ try-with-resources ꡬ문μ μ¬μ©νλ©΄ μμμ μλμΌλ‘ λ«μ μ μμ΅λλ€.
try (FileInputStream fis = new FileInputStream("file.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println("μ
μΆλ ₯ μ€λ₯: " + e.getMessage());
}
// try λΈλ‘μ΄ μ’
λ£λλ©΄ μλμΌλ‘ brκ³Ό fisκ° λ«ν
Java
볡μ¬
μμΈ μ κ° (throws)
μμΈ μ²λ¦¬μ μ±
μμ λ©μλλ₯Ό νΈμΆν κ³³μΌλ‘ λκΈ°λ κ²
β’
ν€μλ : throws
a.k.a ) μμΈ λμ§κΈ°, μμΈ λ λκΈ°κΈ°
public void readFile(String fileName) throws IOException {
FileReader fr = new FileReader(fileName);
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
}
// νΈμΆνλ μΈ‘μμλ μ΄λ κ² μ²λ¦¬
try {
readFile("data.txt");
} catch (IOException e) {
System.out.println("νμΌ μ½κΈ° μ€λ₯: " + e.getMessage());
}
Java
볡μ¬
μμΈ κ°μ λ°μ
μμΈλ₯Ό κ°μ λ‘ λ°μμν€λ λ°©λ²
β’
ν€μλ : throw
β’
μ½λ μ€ν νλ¦μ λ°λΌ, μμΈλ₯Ό κ°μ λ‘ λ°μμμΌ μ²λ¦¬ν λ μ¬μ©νλ€.
// μμΈ κ°μ λ°μ μμ
public class ExceptionExample {
public static void main(String[] args) {
try {
validateAge(15);
} catch (IllegalArgumentException e) {
System.out.println("μμΈ λ°μ: " + e.getMessage());
}
System.out.println("νλ‘κ·Έλ¨ κ³μ μ€ν");
}
public static void validateAge(int age) {
if (age < 18) {
throw new IllegalArgumentException("18μΈ λ―Έλ§μ μ΄μ©ν μ μμ΅λλ€.");
}
System.out.println("μΈμ¦ μλ£: λμ΄ " + age);
}
}
// μ€ν κ²°κ³Ό:
// μμΈ λ°μ: 18μΈ λ―Έλ§μ μ΄μ©ν μ μμ΅λλ€.
// νλ‘κ·Έλ¨ κ³μ μ€ν
Java
볡μ¬
μ¬μ©μ μμΈ μ μ
μλ° νμ€ API μμ μ 곡νλ μμΈ ν΄λμ€ μ΄μΈμμ¬μ©μκ° μ§μ μ μνλ μμΈ ν΄λμ€
β’
μΌλ°μμΈλ‘ μ μΈνλ κ²½μ° : Exception ν΄λμ€λ₯Ό μμ
β’
μ€νμμΈλ‘ μ μΈνλ κ²½μ° : RuntimeException ν΄λμ€λ₯Ό μμ
// μ¬μ©μ μ μ μμΈ ν΄λμ€
class InsufficientBalanceException extends Exception {
private double amount;
public InsufficientBalanceException(double amount) {
super("μμ‘ λΆμ‘±: " + amount + "μμ΄ νμν©λλ€.");
this.amount = amount;
}
public double getAmount() {
return amount;
}
}
// μ¬μ© μμ
class BankAccount {
private double balance;
public BankAccount(double initialBalance) {
this.balance = initialBalance;
}
public void withdraw(double amount) throws InsufficientBalanceException {
if (amount > balance) {
throw new InsufficientBalanceException(amount - balance);
}
balance -= amount;
System.out.println(amount + "μ μΆκΈ μλ£. μμ‘: " + balance + "μ");
}
}
// μμΈ μ²λ¦¬
try {
BankAccount account = new BankAccount(5000);
account.withdraw(7000); // μμΈ λ°μ
} catch (InsufficientBalanceException e) {
System.out.println("μΆκΈ μ€ν¨: " + e.getMessage());
System.out.println("λΆμ‘±ν κΈμ‘: " + e.getAmount() + "μ");
}
Java
볡μ¬