Java

[Java] Exception

Bay Im 2024. 3. 18. 12:58
  • 에러 (Error)
    • 하드웨어의 잘못된 동작이나 고장으로 인한 오류 (개발자가 해결할 수 없는 오류)
    • 에러 발생 시 프로그램 종료
    • 정상 실행 상태로 돌아갈 수 없다.
  • 예외 (Exception)
    • 사용자의 잘못된 조작이나 개발자의 잘못된 코딩으로 인한 오류 (개발자가 해결 가능한 오류)
    • 예외 발생시 프로그램 종료
    • 예외 처리 추가하면 정상 실행 상태로 돌아갈 수 있다.
  • 예외의 종류
    • 일반(컴파일 체크) 예외(Exception)
      • 예외 처리 코드 없으면 컴파일 오류 발생
    • 실행 예외(RuntimeException)
      • 예외 처리 코드를 생략하더라도 컴파일이 되는 예외
  • 예외 처리 방법
    • try - catch - finally
      • 다중 catch 가능
        • 예외 별로 처리 코드 다르게 구현
        • 순서는 상위 클래스가 위에 위치해야 한다.
      • 멀티 catch 가능
        • 하나의 catch 블록에서 여러 개의 예외 처리 가능
        • 동일하게 처리하고 싶은 예외를 | 로 연결한다.
      • catch 블록 코드 예시
        • try {
          	예외가 발생할 만한 코드;
          } catch(예외클래스 객체e) {
          	예외발생시 처리하는 코드;
          } finally {
          	예외가 발생하든 안하든 무조건 실행되는 코드;
          	마무리 정리하는 코드;
          }​
        • catch (Exception e) {
          • getMessage()
            • System.out.println(e.getMessage());
            • 예외 내용 출력
          • printStackTrace()
            • e.printStackTrace();
            • 예외 경로 출력
    • throws
      • 자신을 호출한 메소드에 예외처리를 떠넘기는 것
      • 리턴타입 메소드명(매개변수) throws 예외클래스1, 예외클래스2, … { … } 형식
      • 예시
        • static void myFunc() throws Exception {
          	...
          	throw new Exception();
          }
          
          // 메인 영역
          try {
          	myFunc();
          } catch (Exception e) {
          	...
          }
    • 사용자 정의 예외 클래스 선언
      • 자바 표준 API에서 제공하지 않는 예외는 사용자 정의 예외 클래스 선언
      • extends [Exception | RuntimeException] 과 같이 여러 예외처리 가능
      • 예시
        • // 사용자 정의 예외
          class MyException extends Exception {
              String message = "";
          
              public void printMessage() {
                  System.out.println(this.message);
              }
          }
          
          static void myFunc() throws Exception {
          	...
          	if (조건문) {
          		MyException e = new MyException();
          		e.message = "사용자 정의 예외";
          		throw e;
          }
          
          // 메인 영역 
          try {
          	myFunc();
          } catch (MyException e) {
          	e2.printMessage();
          }
    • try - with - resources
      • try 문을 벗어나면 자동으로 사용했던 객체의 close()를 호출해서 리소스를 닫아주는 구문 (JDK7 이상)
      • AutoCloseable 인터페이스를 구현한 메소드만 가능하다.
      • 리소스 객체
        • 입출력스트림, 서버소켓, 소켓, 각종 채널
      • 예시 
        • public class Class1 {
          	public method1() throws Exception {
          		Connection conn = DriverManager.getConnection("...");
          		Statement stat = conn.createStatement();
          		ResultSet rs = stat.executeQuery("SELECT 1 from dual");
          		
          		try (conn; stat; rs) {
          			...
          		} catch (Exception e) {
          			...
          		}
          	}
          }
        • try (FileWriter file = new FileWriter("data.txt")) {
              file.write("Hello World");
          } catch (Exception e) {
              e.printStackTrace();
          }
          

 

'Java' 카테고리의 다른 글

[Java] Collection  (0) 2024.03.18
[Java] Thread  (0) 2024.03.18
[Java] 중첩 클래스, Wrapper 클래스, API 메소드, 자바 관련 단어들  (0) 2024.03.18
[Java] Abstract, Interface  (0) 2024.03.13
[Java] 상속, Override  (0) 2024.03.13