πŸ“•μ˜ˆμ™Έμ²˜λ¦¬

dev_itzel_02✨·2024λ…„ 8μ›” 28일
post-thumbnail

πŸ·οΈμ˜ˆμ™Έ(Exception)

μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μ΄ μ˜ˆμƒμΉ˜ λͺ»ν•œ 상황에 μ§λ©΄ν–ˆμ„ λ•Œ λ°œμƒν•˜λŠ” 것

  • μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜μ§€ μ•ŠμœΌλ©΄ ν”„λ‘œκ·Έλž¨μ€ μ€‘λ‹¨λ˜κ±°λ‚˜ μ˜ˆμƒμΉ˜ λͺ»ν•œ κ²°κ³Όλ₯Ό μ΄ˆλž˜ν•  수 있음

πŸ“try-catch 블둝

 ▫️ μ˜ˆμ™Έκ°€ λ°œμƒν•  수 μžˆλŠ” μ½”λ“œλŠ” try 블둝 내에 μœ„μΉ˜ν•΄μ•Ό ν•˜λ©°, ν•΄λ‹Ή μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜λŠ” μ½”λ“œλŠ” catch 블둝 내에 μžˆμ–΄μ•Ό 함.

πŸ“finally 블둝

 ▫️ try-catch 블둝 후에 finally 블둝을 μœ„μΉ˜μ‹œν‚¬ 수 있으며, μ˜ˆμ™Έ λ°œμƒ 여뢀와 상관없이 항상 싀행됨.

πŸ“throw ν‚€μ›Œλ“œ

 ▫️ 직접 μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚΄.

πŸ“throws ν‚€μ›Œλ“œ

 ▫️ λ©”μ„œλ“œ 선언뢀에 throws ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή λ©”μ„œλ“œκ°€ μ˜ˆμ™Έλ₯Ό 던질 수 μžˆλ‹€λŠ” 것을 λͺ…μ‹œν•΄μ€Œ.


e.g.

πŸ“‘Throwable.java

public class Main {
    public static void main(String[] args) {
        try {
            int result = 10 / 0; // μ˜ˆμ™Έ λ°œμƒ
        } catch (Throwable t) { // νŠΉμ • 였λ₯˜κ°€ μ•„λ‹Œ Throwable 슈퍼클래슀둜 λͺ¨λ“  μ˜ˆμ™Έλ₯Ό μž‘μ•„ t에 λ‹΄μŒ
            System.out.println("Throwable caught: " + t);
        }
    }
}
  • javaμ—μ„œ λͺ¨λ“  였λ₯˜μ™€ μ˜ˆμ™Έμ˜ 슈퍼 클래슀
  • Throwable ν΄λž˜μŠ€λŠ” 두 개의 μ£Όμš” μ„œλΈŒ 클래슀, 즉 Error ν΄λž˜μŠ€μ™€ Exception 클래슀λ₯Ό κ°€μ§€κ³  있음.

πŸ“‘Error.java

public class Main {
    public static void main(String[] args) {
        try {
            recursive();
        } catch (Error e) { 
            System.out.println("Error caught: " + e);
        }
    }
    
    private static void recursive() {
        recursive(); // μž¬κ·€ 호좜둜 StackOverflowError λ°œμƒ
    }
}
  • ν”„λ‘œκ·Έλž¨μ—μ„œ λ°œμƒν•˜λŠ” μ‹¬κ°ν•œ 였λ₯˜λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 클래슀
  • ν”„λ‘œκ·Έλž¨μ΄ μˆ˜ν–‰μ„ 계속할 수 없을 λ•Œ λ°œμƒν•˜λ©°, 였λ₯˜λ₯Ό μ²˜λ¦¬ν•˜λŠ” 것은 거의 λΆˆκ°€λŠ₯함.
  • 단지, 였λ₯˜λ₯Ό μ°Ύμ•„ μ €μž₯ν•˜κ±°λ‚˜ λ³΄κ³ ν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©

πŸ“‘Exception.java

import java.io.FileReader;
import java.io.FileNotFoundException;

public class Main {
    public static void main(String[] args) {
        try {
            FileReader fr = new FileReader("non_existing_file.txt");
        } catch (Exception e) { 
            System.out.println("Exception caught: " + e);
        }
    }
}
  • ν”„λ‘œκ·Έλž¨μ—μ„œ λ°œμƒν•˜λŠ” μ˜ˆμ™Έλ₯Ό λ‚˜νƒ€λ‚΄λŠ” 클래슀
  • ν”„λ‘œκ·Έλž¨ μ½”λ“œμ— μ˜ν•΄ 예견되고 처리될 수 있음
  • IOException, SQLException, ClassNotFoundException, etc.

πŸ“‘RuntimeException.java

public class Main {
    public static void main(String[] args) {
        try {
            int[] arr = new int[5];
            arr[10] = 50;
        } catch (RuntimeException e) { 
            System.out.println("RuntimeException caught: " + e);
        }
    }
}
  • Exception 클래슀의 μ„œλΈŒ 클래슀
  • 주둜 ν”„λ‘œκ·Έλž¨μ˜ λ²„κ·Έλ‘œ 인해 λ°œμƒν•˜λŠ” μ˜ˆμ™Έλ‘œ μ‹€ν–‰ 도쀑에 λ°œμƒν•˜λ©° 보톡 μ²΄ν¬λ˜μ§€ μ•Šμ€ μ˜ˆμ™ΈλΌκ³  뢀름
  • NullPointerException, ArrayIndexOutOfBoundsException, ClassCastException, etc.

πŸ“‘μž˜λͺ»λœ 데이터 νƒ€μž… μ‚¬μš©ν•œ 경우

public class Main {
    public static void main(String[] args) {
        String str = "abc";
        try {
            int num = Integer.parseInt(str);
        } catch (NumberFormatException e) { 
            System.out.println("잘λͺ»λœ 숫자 ν˜•μ‹μž…λ‹ˆλ‹€.");
        }
    }
}
  • ν”„λ‘œκ·Έλž¨μ€ νŠΉμ • 데이터 νƒ€μž…μ„ κΈ°λŒ€ν•˜μ§€λ§Œ, λ‹€λ₯Έ νƒ€μž…μ˜ 데이터λ₯Ό 받을 λ•Œ μ˜ˆμ™Έκ°€ λ°œμƒν•  수 있음.
  • NumberFormatException μ˜ˆμ™Έ λ°œμƒ

πŸ“‘λ¦¬μ†ŒμŠ€ μ ‘κ·Ό 였λ₯˜

import java.io.FileReader;
import java.io.FileNotFoundException;

public class Main {
    public static void main(String[] args) {
        try {
            FileReader fr = new FileReader("non_existing_file.txt");
        } catch (FileNotFoundException e) { 
            System.out.println("νŒŒμΌμ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€.");
        }
    }
}
  • νŒŒμΌμ„ μ—΄κ±°λ‚˜ λ°μ΄ν„°λ² μ΄μŠ€μ— μ—°κ²°ν•˜λ €κ³  μ‹œλ„ν•˜λŠ”λ° ν•΄λ‹Ή λ¦¬μ†ŒμŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•Šκ±°λ‚˜ μ‚¬μš©ν•  수 μ—†λŠ” μƒνƒœμΌ λ•Œ μ˜ˆμ™Έ λ°œμƒ
  • FileNotFoundException, SQLException 등이 λ°œμƒ

πŸ“‘λ„ μ°Έμ‘°

public class Main {
    public static void main(String[] args) {
        int[] arr = new int[5];
        try {
            arr[10] = 50;
        } catch (ArrayIndexOutOfBoundException e) { 
            System.out.println("λ°°μ—΄μ˜ λ²”μœ„λ₯Ό μ΄ˆκ³Όν•˜μ˜€μŠ΅λ‹ˆλ‹€.");
        }
    }
}
  • 객체 μ°Έμ‘°κ°€ null인 μƒνƒœμ—μ„œ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜κ±°λ‚˜ 멀버에 μ ‘κ·Όν•˜λ €κ³  μ‹œλ„ν•˜λ©΄ NullPointerException이 λ°œμƒ

πŸ“‘λΆ„ν•  였λ₯˜

public class Main {
    public static void main(String[] args) {
        try {
            int result = 10 / 0;
        } catch (ArithmeticException e) { 
            System.out.println("0으둜 λ‚˜λˆŒ 수 μ—†μŠ΅λ‹ˆλ‹€.");
        }
    }
}
  • 숫자λ₯Ό 0으둜 λ‚˜λˆ„λ €κ³  μ‹œλ„ν•˜λ©΄ ArithmeticException이 λ°œμƒν•¨

πŸ“‘μž˜λͺ»λœ ν˜•λ³€ν™˜

class Animal{}
class Dog extends Animal {} 
// Dog == Animal 
// Animal != Dog 
// DogλŠ” Animal의 μžμ‹ 클래슀

public class Main {
    public static void main(String[] args) {
        Animal a = new Animal();
        try {
            Dog d = (Dog) a;
        } catch (ClassCastException e) { 
            System.out.println("잘λͺ»λœ ν˜•λ³€ν™˜μ΄μ΄λ£¨μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.");
        }
    }
}
  • ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” νƒ€μž…μœΌλ‘œμ˜ ν˜•λ³€ν™˜μ„ μ‹œλ„ν•˜λ©΄ ClassCastException이 λ°œμƒν•¨

πŸ“‘λ©€ν‹°μŠ€λ ˆλ”© 동기화 문제

public class Main {
    public static void main(String[] args) {
        Object obj = new Object();
        try {
            obj.notify();
        } catch (IllegalMonitorStateException e) { 
            System.out.println("객체의 λͺ¨λ‹ˆν„°λ₯Ό μ†Œμœ ν•˜μ§€ μ•Šκ³  notifyλ₯Ό ν˜ΈμΆœν•˜μ˜€μŠ΅λ‹ˆλ‹€.");
        }
    }
}
  • λ©€ν‹°μŠ€λ ˆλ”© ν™˜κ²½μ—μ„œ 동기화 문제둜 인해 μ˜ˆμ™Έκ°€ λ°œμƒν•  수 있음
profile
πŸœπŸ‘£steadinessπŸœπŸ‘£

0개의 λŒ“κΈ€