Notice
Recent Posts
Recent Comments
Link
«   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
Archives
Today
Total
관리 메뉴

UpDown Dev Story

자바(Java) 에러(Error) 와 예외(Exception)에 대해서 알아보자 본문

Java

자바(Java) 에러(Error) 와 예외(Exception)에 대해서 알아보자

updown 2021. 7. 8. 02:45

목적

자바에서 Error와 Exception에 대해 알아보고 기록하기 위해서 작성했습니다

그래서 Error란?

Error(오류)는 자바 프로그램 밖에서 발생한 예를 말한다.
예) 메인보드 고장 서버 디스크 고장 등...

그래서 Exception이란?

Exception(예외)는 프로그램 안에서 우리가 예상한, 혹은 예상치도 못한 일이 발생하는 것을 미리 예견하고 안전장치를 하는 것

Exception 의 대한 예시 

백화점에서 물건을 구매하는것으로 예시를 들어보겠습니다

  • 정상적인 프로세스
고객이 상품 선택 -> 상품 가격 확인 -> 카드나 현금 전달받음 -> 계산 처리 -> 물건 싸서 줌
  • 예외상황
고객이 상품 선택 -> 상품 가격 확인 -> 가격 흥정 시작 -> 버티기 -> 가격 흥정 반복 후 못이기는 척 깎아줌 -> 할인율 결정 -> 카드나 현금 전달 받음 -> 계산 처리 -> 물건 싸서 줌

위 같은 상황이 벌어지면 글쓴이가 직원이라면 스트레스를 받겠지만 우리의 자바는 예외라는 것을 던져버립니다
예) null인 객체에 메소드를 호출하면 NPE 던지기 등

그렇다면 이런 상황에 어떻게 대처해야할까? ( try-catch )

  • NPE가 발생하는 코드
public class Exception {
	public static void main(String[] args) {
		String string = null;
		System.out.println(string.toString());
	}
}
  • try-catch 문으로 대처 한 코드
아래 처럼 try-catch 구문을 이용하여 catch에서 Exception이 발생되었을때 예외 처리가 가능하다
public class Exception {
	public static void main(String[] args) {
		try {
			String string = null;
			System.out.println(string.toString());
		} catch (java.lang.Exception e) {
			System.out.println("대처했지롱");
		}
	}
}

 

그렇다면 여기서 한가지 예외처리는 하였지만 손님이 입어봤던 옷들을 다시 정리해야 하는데
그전에 Exception이 발생해서 catch 구문으로 들어간다면? 우리가 만든 프로그램은 옷 정리는 못하는걸까?

  • 글 초반에 말했던 백화점 에서 물건을 사는 프로세스를 try 구문에 넣고 catch 에 내쫓기 한 예외처리
public class Exception {
	public static void main(String[] args) {
		try {
			// 아래 부분이 로직이라고 생각해주세요 :)
            고객이 상품 선택 -> 상품 가격 확인 -> 가격 흥정 시작 -> 버티기 -> 가격 흥정 반복 후 못이기는 척 깎아줌 -> 
			할인율 결정 -> 카드나 현금 전달 받음 -> 계산 처리 -> 물건 싸서 줌 // 이 로직에서 Exception 발생
            
			옷정리
		} catch (java.lang.Exception e) {
			System.out.println("내쫓기");
		}
	}
}

Exception이 발생하여도 반드시 실행해야 하는 구문이 있다면 어떻게 해야할까?

try-catch 블록에서 어떠한 예외가 발생하여도 반드시 실행하는 finally 블록을 추가하여 처리 할 수 있다
public class Exception {
	public static void main(String[] args) {
		try {
			// 고객이 상품 선택 -> 상품 가격 확인 -> 가격 흥정 시작 -> 버티기 -> 가격 흥정 반복 후 못이기는 척 깎아줌 ->
			// 할인율 결정 -> 카드나 현금 전달 받음 -> 계산 처리 -> 물건 싸서 줌
		} catch (java.lang.Exception e) {
			System.out.println("내쫓기");
		} finally {
			System.out.println("옷정리");
		}
	}
}

그렇다면 예외의 종류에는 뭐가 있을까?

예외의 종류는 세 가지다

  • checked exception
  • unchecked exception -> (RuntimeException 확장한 Excpetion들)
  • error

 

  • Checked Exception과 UnChecked Exception의 차이정리

출처:  https://close852.tistory.com/47

  • 예외들의 상관관계를 그림으로 나타내면 다음과 같다

자바의 신 책에서 직접 찍은 이미지

* 그림에는 보는것과 같이 Error와 Exception은 모두 Throwable 클래스를 상속받고 있다
이렇게 되어 있는 이유는 Exception이나 Error의 성격은 다르지만 모두 동일한 이름의 메소드를 사용해서
처리할 수 있도록 하기 위함이다.

그런데...그냥 내쫓고 싶으면...? ( throw )

예외가 발생하지 않아도 예외를 발생시키고 싶을때가 있다
그런 경우에는 아래 코드 처럼 throw를 사용해 Exception을 발생시킬수 있다.
public class Exception {
	public static void main(String[] args) {
		try {
			throw new java.lang.Exception("그냥 내쫓기");
            
			로직
			고객이 상품 선택 -> 상품 가격 확인 -> 가격 흥정 시작 -> 버티기 -> 가격 흥정 반복 후 못이기는 척 깎아줌 ->
			할인율 결정 -> 카드나 현금 전달 받음 -> 계산 처리 -> 물건 싸서 줌
		} catch (java.lang.Exception e) {
			System.out.println(e.getMessage());
		} finally {
			System.out.println("옷정리");
		}
	}
}

이상으로 Error와 Exception에 대해 알아봤습니다

Comments