Archives
Recent Posts
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
관리 메뉴

개발도생's Blog

[12Days] Study_Exception 본문

개발자의 일기/Study

[12Days] Study_Exception

개발도생 2023. 4. 13. 16:24

프로그램을 작성할 때 문법에 맞지 않게 코드를 작성할 때 발생하는 문법 오류(Syntax Error),

 

문법에 맞게 작성이 된 프로그램이 예상하지 못한 오류가 발생해서 동작이 강제로 종료가 되는 경우가 있다.

 

예상하지 못한 상황이 발생하여 프로그램에 영향이 미치는 것을

 

'오류(Error)''예외(Exception)' 두 가지로 구분이 가능하다.

 

오류(Error)는,

시스템 레벨에서 프로그램에 심각한 문제를 야기하여 실행 중인 프로그램을 종료시킨다.

 

오류는 개발자가 미리 예측하여 처리할 수 없는 것이 대부분이므로, 오류에 대한 처리는 할 수 없다.

 

예외(Exception)는,

오류와 마찬가지로 실행 중인 프로그램을 비정상적으로 종료시키지만,

 

발생할 수 있는 상황을 미리 예측하여 처리할 수 있다.

 

따라서 개발자는 예외 처리(exception handling)를 통해 예외 상황을 처리할 수 있도록

 

코드의 흐름을 바꿀 필요가 있다.

 


예외 처리(exception handling)

자바에서는 프로그램이 실행되는 도중 발생하는 예외를 처리하기 위해 

 

'try', 'catch', 'finally' 문을 사용할 수 있다.

 

∙ try : 기본적으로 맨 먼저 실행되는 코드로 여기에서 발생한 예외는 'catch' 블록에서 처리

 catch : try 블록에서 발생한 예외 코드나 예외 객체를 인수로 전달받아 그 처리를 담당

 finally : 이 블록은 try 블록에서 예외가 발생하건 안 하건 맨 마지막에 무조건 실행

 

※예외 처리 문법 예시, Error를 강제로 발생시키기 위해 'throw' 구문을 사용

public class ExceptionTest {

	public static void main(String[] args) {
		MyException m = new MyException();
		
		System.out.println("에러 발생 전");
		m.exceptionThrows();
		System.out.println("에러 발생 후 처리 완료!");
		
	}
}
public class MyException {

	public void exceptionThrows() {
		exceptionRun();
	}
    
	// 에러를 발생 시키기 위한 메서드
	private void exceptionRun() {
		System.out.println("에러 발생!");
		try {
			throw new Exception("에러가 발생하였습니다.");
		} catch (Exception e) {
			e.printStackTrace();
            		// Exception 이 발생한 이유와 위치는 어디에서 발생했는지
			// 전체적인 단계를 전부 출력해주는 메서드
		}
	}
}

 


예외 처리 진행 순서

    try {
        •••
        try {
            ① •••
        } catch(Exception e1) {
            ② •••
        } catch(Exception e2) {
            ③ •••
        }
    } catch(Exception e3) {
        ④ •••
    } catch(Exception e4) {
        ⑤ •••
    }
    finally {
        ⑥
        }

만약 ①번 try 블록에서 예외가 발생하지 않고, 바깥쪽 try 블록에서도 예외가 발생하지 않으면,

 

⑥번 finally 블록이 바로 실행된다.

 

하지만 ①번 try 블록에서 예외가 발생하면,

 

②번과 ③번 catch 블록에서 해당 예외를 처리할 수 있는지 검사하게 된다.

 

만약 적절한 catch 블록을 찾지 못하면,

 

바깥쪽 try 블록의 ④번과 ⑤번 catch 블록도 차례대로 검사하게 됩니다.

 

해당 예외를 처리할 수 있는 catch 블록을 찾게 되면, 해당 catch 블록을 실행한 후 ⑥번 finally 블록을 실행한다.

 

하지만 모든 catch 블록이 해당 예외를 처리할 수 없으면, 

 

예외는 처리되지 못한 채 해당 프로그램은 강제 종료된다.

 


Exception Class

자바에서는 모든 예외의 조상(상위) 클래스가 되는 'Exception' Class는 크게 다음과 같이 구분할 수 있다.

 

TCP School, 이미지 참고

 

'RuntimeException' 클래스를 상속받는 자식 클래스들은,

 

주로 치명적인 예외 상황을 발생시키지 않는 예외들로 구성되어 있다.

 

하지만 그 외 'Exception' 클래스에 속하는 자식 클래스들은 치명적인 예외 상황을 발생시키기 때문에

 

반드시 try와 catch문을 사용해서 예외 처리를 해줘야 한다. 

 


예외 처리를 명확하게 왜 사용하는지 모르고 사용하다가

 

이번에 '왜' 사용해야 되는지 조금은 이해하고 사용할 수 있게 된 거 같다.

 

하지만 완벽하게 갈증이 해소된 것은 아니기 때문에 조금 더 공부하면서 

 

깊이 이해하고 완벽하게 활용할 수 있도록 노력해야겠다.

 

속도는 더디더라도 꾸준하게 성장하는 개발자가 되기를!

'개발자의 일기 > Study' 카테고리의 다른 글

[11Days] Study_추상화  (0) 2023.04.07
[10Days] Study_Inheritance  (0) 2023.03.28
[9Days] Study_Method  (0) 2023.03.24
[8Days] Study_Static&Constructor  (0) 2023.03.22
[7Days] Study_객체 지향 언어(Java)  (0) 2023.03.18
Comments