본문 바로가기
Web/Java

Java(27) - 예외처리

by SeleniumBindingProtein 2022. 1. 28.
728x90
반응형

1. 오류의 종류
    1) 에러(Error)
        - 의도치 않게 프로그램이 종료되는 것을 에러라 함.
            - 하드웨어의 잘못된 동작 또는 고장으로 인한 오류(ex-정전, 배드섹터 등)
            - 에러가 발생하면 프로그램이 비정상 종료가 됨.
            - 정상 실행 상태로 돌아갈수가 없음.
    2) 예외(Exception)
        - 사용자가 잘못된 조작 또는 개발자의 잘못된 프로그래밍으로 인한 오류를 말함.
        - 예외가 발생하면 프로그램이 종료됨.
        - 단, 예외 처리를 추가하면 정상 실행 상태로 되돌릴수가 있음.

2. 프로그램에서의 예외(오류)     
    1) 컴파일 오류 (compile error, checked exception)
        - 프로그램 코드 작성 중 발생하는 문법적 오류.
        - 예외 처리 코드가 없다면 컴파일 예외 발생함.
        - eclipse, Intellij에서 대부분 detection 됨.
    2) 실행 오류 (runtime error, unchecked exception)        
        - 실행 중인 프로그램이 의도하지 않은 동작(bug)을 하거나 프로그램이 중지 되는 오류.
        - 실행 오류는 비정상 종료가 되는 경우 시스템의 심각한 장애가 발생할수 있음.
        - NullPointerException, ArrayIndexOutofBoundsException, NumberFormatException...

 3. 예외 처리의 중요성
    1) 프로그램의 비정상 종료를 피하여 시스템이 원할이 실행되도록 함.
    2) 실행 오류가 발생한 경우 오류의 과정을 재현하는 것은 현실적으로 힘듦.
    3) 오류가 발생한 경우 log를 남겨서 추후 log 분석을 통해 그 원인을 파악하여 
       bug 수정하는것이 중요.

4.  예외 처리하기와 미루기 
    1) try ~ catch문 
        - try 블록에는 예외가 발생할 가능성이 있는 코드를 try 블럭 안에 기술
        - 예외가 발생하면 catch 블럭이 수행됨.

        try {
            예외가 발생할 수 있는 코드 
        } catch(처리할 예외타입 e) {
            try 블록 안에서 예외가 발생했을 때 예외를 처리하는 부분
        }

    2) try ~ catch-finally 문
        - finally 블럭에서 파일을 닫거나 네트웨크을 닫는 등의 리소스 해제 구현을 함.
        - try {} 블럭이 수행되는 경우 finally{} 블럭은 항상 수행 됨.
        - 여러 개의 예외 블럭이 있는 경우 각각에서 리소스를 해제하지 않고 finally 블록에서
          해제하도록 구현함.

    3) try with resources문
        - 리소스를 사용하는 경우 close()하지 않아도 자동으로 해제되도록 함.
        - 리소스를 try() 내부에서 선언해야만 함.
        - close()를 명시적으로 호출하지 않아도 try{} 블록에서 열린 리소스는 
          정상적인 경우나 예외가 발생한 경우 모두 자동으로 해제됨.
        - 해당 리소스 클래스가 AutoCloseable 인터페이스를 구현해야 함.
            - FileInputStream의 경우에는 AutoCloseable을 구현하고 있음.

    4) 예외처리 미루기 (throws)
        - 이를 사용하는 부분에서 처리하는 방법.
        - 메서드를 호출한 곳에서 예외를 처리하라고 떠 넘김.
        - 호출한 곳에서 반드시 예외처리 코드가 있어야 함.
        - throws를 이용하면 예외가 발생할수 있는 부분을 사용하는 문장에서 예외를 처리할수있음.

    5) 하나의 try{} 블록에서 예외가 여러개 발생하는 경우
        - 여러개의 예외가 발생하는 경우 예외를 묶어서 하나의 방법으로 처리할수도 있음.
        - 각각의 예외를 따로 처리할수도 있음.
        - Exception 클래스를 활용하여 처리할때 Exception 블록은 맨 마지막에 위치해야 함.

5. 강제로 예외 발생시키기 - throw
    1) 코드에서 강제로 예외를 발생시킴.   

6. 사용자 정의 예외 클래스 만들기
    1) 자바 표준 API에서 제공하지 않는 예외는 직접 프로그래밍해서 만들어야 함.
    2) 응용 애플리케이션 서비스에서 발생하는 예외 
        - 슈팅게임에서 비행기가 리소스가 없어도 비행하는 경우
        - 회원 가입 실패, 계좌 잔고 부족, 계좌 이체 실패 등

    3) 기존 예외 클래스 중 가장 유사한 예외 클래스에서 상속받아 사용자 정의 
       예외 클래스를 만듦.
    4) 기본적으로 Exception 클래스를 상속해서 만들수 있음.

    5) 패스워드에 대한 예외처리하기 
        - 패스워드를 입력할때 다음과 같은 경우 오류처리를 합니다.
            - 비밀번호는 null일수 없습니다.
            - 비밀번호의 길이는 10자 이상입니다.
            - 비빌번호는 문자로만 이루어져서는 안됩니다. (하나이상 숫자나 특수문자를 포함)

728x90
반응형

'Web > Java' 카테고리의 다른 글

Java(30) - review4  (0) 2022.01.28
Java(28) - IO입출력  (0) 2022.01.28
Java(26) - Stream  (0) 2022.01.28
Java(25) - 람다식  (0) 2022.01.28
Java(24) - 내부클래스  (0) 2022.01.28

댓글