티스토리 뷰

Programming/Java

[Java] 예외처리 : Try/Catch, Throws

감성적인 개발자 2021. 8. 19. 17:28

Exception

Exception(예외처리)이란 오류가 발생했을 때 프로그램이 종료되는것을 막는 것이다. 예외처리는 Error와는 다르게 사용자(S/W)가 대처할 수 있다. 반드시 필요한 예외처리를 CheckedException이라 하고 프로그래머의 판단에 맡기는 예외처리를 UnCheckedException 이라고 한다.

 

예제

public class Exeption {
	public static void main(String[] args) {
		int r;
        
		System.out.println("Exception Before");
		try {
			r = 10/0;
			System.out.println(r);
		}
		catch(Exception e) {
			e.printStackTrace();
			String msg = e.getMessage();
			System.out.println("msg : " + msg);
		}
		System.out.println("Exception After");//프로그램이 종료되지 않고 실행된다.
	}
}

콘솔창 출력

try catch문을 사용하지 않았다면, r을 0으로 나눈 순간 프로그램이 종료되어 콘솔창에는 Exception Before만 출력됐을 것이다. try영역에는 예외가 발생할 수 있는코드 (0으로 정수를 나눈다거나, 배열의 인덱스 초과, null 레퍼런스이용 등)를 기입하고 catch를 이용해 발생하는 오류를 처리하고 프로그램을 계속 실행해나간다. 단, try문 안에서 예외가 발생한 이후의 코드는 실행되지 않는다. ( println(r)은 실행되지 않았다. )

 

 

Finally

Exception에서 주의할 점은 try 에 존재하는 에러코드 이후의 명령어들은 실행되지 않는다는 것이다. 그렇게 되면 꼭 실행해야 할 명령어들이 실행되지 못하고 넘어가버리는 경우가 생길지도 모른다. 이 때 finally 를 이용하면 try문에서 문제가 발생하더라도 사용자가 실행하고싶은 명령어들을 실행할 수 있게된다. 

 

예제

public class Finally{
	public static void main(String[] args) {
		int r;
        
		System.out.println("Exception Before");
		try {
			r = 10/0;
			System.out.println("출력되지 않습니다.");
		}
		catch(Exception e) {
			e.printStackTrace();
			String msg = e.getMessage();
			System.out.println("msg : " + msg);
		}
		finally {
//			System.out.println("finally : " + 1/0);
			System.out.println("항상 실행됩니다.");
		}
		System.out.println("Exception After");
	}
}

콘솔창 출력

단, Finally내부에서 에러가 발생하면 즉시 종료됨을 주의하자.

		finally {
			System.out.println("finally : " + 1/0);
			System.out.println("항상 실행됩니다.");
		}

콘솔창 출력

 

Throws

throws Exception 은 자기 자신을 호출한 메소드에게 오류처리를 넘겨주는 것이다. 예제는 first() -> second -> third() 순으로 호출을 하였고 third()메소드에서는 정수를 0으로 나누는 오류를 범하였다. 하지만 이 오류에 대한 예외처리는 third()메소드가 아닌 second()메소드에게 넘어가고 second 또한 throws Exceprion을 하였으니 first()메소드에게 까지 오류에 대한 예외처리를 넘기게 된다.

 

예제

public class Throws {
	public static void main(String[] args) {
		Throws lecture = new Throws();

		try {
			lecture.first();
		} catch (Exception e) {
			e.printStackTrace();
			String msg = e.getMessage();
			System.out.println("msg : " + msg);
		}
	}
	
    
	public void first() throws Exception {
		second();
	}
	
	public void second() throws Exception {
		third();
	}
	
	public void third() throws Exception {
		System.out.println(10 / 0);
	}
}

콘솔창 출력

 

정리

예외 처리에는 두가지가 있다는 것을 알아봤다. 하나는 try, catch, finally 또 하나는 throws이다. 예외처리를 사용하는것 자체는 난이도가 높지 않지만 프로그램을 하다가 발생하는 무수히 많은 예외에 대해 내가 직접 예외처리를 할 것인지 아니면 넘겨버릴 것인지를 그때마다 상황을 잘판단해서 사용하는 것이 중요하다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함