[자바] 예외처리 (2) - 예외클래스의 구조

2016. 7. 8. 03:51· Basic/Java


이 글은 PC 버전 TISTORY에 최적화 되어있습니다.


서론

 이번에는 예외 클래스의 계층구조와 Exception 클래스에서 Runtime Exception 클래스를 제외한 Checked Exception 과 RuntimeException인 UnChecked Exception에 대해서 알아보도록 하겠습니다.


예외클래스의 구조




 위의 그림은 예외클래스의 구조입니다. 모든 클래스의 조상은 Object 클래스이므로 Exception과 Error 클래스 역시 Object 클래스를 상속 받고 있습니다. Throwable 클래스를 상속 받는 클래스는 Error와 Exception이 있는데 모든 예외의 최고 조상 클래스는 당연히 Execption 입니다. Error 자체는 시스템 레벨의 심각한 영향을 주는 에러이기 때문에 시스템에 변화를 주어 문제를 처리해야 하는 경우가 일반적입니다. 하지만 Exception은 개발자가 충분히 로직을 추가하여 처리할 수 있는 부분이죠.





 여기서 Exception 클래스는  많은 자식들을 가지고 있는데 이 예외 클래스들은 두 가지의 그룹으로 나눠질 수 있습니다.  이 중 Runtime Exception은 Checked Exception과Unchecked Exception을 구분하는 기준이므로 중요합니다. Checked Exception과 Unchecked Exception을 아래의 표로 비교해보겠습니다.  



 

  Checked Exception

 Unchecked Exception

 클래스

 

Exception 클래스의 자손들 중 Runtime Exception을 제외한 

모든  클래스 


Runtime Exception 클래스와 

자손 클래스

 처리여부

 

반드시 예외 처리 해야함


 명시적 처리 강제하지 않음

 확인시점

 

컴파일 단계



실행 단계

 예외 발생 시 트랜잭션 처리

 roll back 하지 않음

roll back 함 

대표 예외 


- IOException
- SqlException


- NullPointerException

- IllegalArgumentException

- IndexOutOfBoundException

- SystemException








[코드 1. Checked Exception]
public class CheckedException {
	public static void main(String[] args)
	{
		try
		{
            // Exception 클래스로 예외를 실행시킨다.
			throw new Exception();
		} catch (Exception e)
		{
            // Checked Exception 이므로 예외처리를 해주는데 해주지 않으면 컴파일 실패
			System.out.println("Exception 발");
		}
	}
}


 Unchecked Exception 클래스들은 주로 프로그래머의 실수에 의해서 발생할 수 있는 예외들로서 자바의 프로그래밍 요소들과 관계가 깊습니다. 배열의 범위를 벗어나거나 값이 null인 멤버 변수를 호출할 때 발생하는 예외들이죠. 이 클래스 그룹에 속하는 예외 발생 가능성 있는 코드들은 예외 처리를 해주지 않아도 컴파일 시 문제가 되지 않습니다. 또한 예외가 발생하지 않도록 코딩하는 것이 중요한 것이죠. 이를 다 예외 처리해주려면 배열과 참조 변수는 모두 예외 처리해주어야하는 굉장히 귀찮은 상황이 되겠습니다.




[코드 2. Unchecked Exception]

public class ExceptionEx1 {
	public static void main(String[] args)
	{
            // 에러가 발생하지만 컴파일은 가능하다.
		throw new RuntimeException();
	}
}

 하지만 Checked Exception의 경우에는 주로 외부의 영향으로 발생하는 것으로 사용자들이 존재하지 않는 파일의 이름을 입력했다던가, 입력한 데이터 형식이 잘 못 된 경우에 발생하는 예외입니다. 이들은 반드시 처리해주어야하고 그렇지 않으면 컴파일 시 에러가 발생합니다.




주의점

 자바에서 제공해주는 Checked Exception이라는 것은 굉장한 유혹으로 작용할 수 있습니다. 생각해보면 내가 이 오류를 해결하는데 몇 일 밤을 샜는데 try catch 문으로 그냥 넘어가버려? 하는 마음 속 악마가 나올 수도 있는 것입니다. 무지했던 저도 try catch 문에 대해 자세히 이해하지 않고 그냥 '많은 사람들이 쓰는 방식이니까' 라는 생각으로 사용했습니다. 그에 따른 문제점이 처리하지도 않을 오류에 try catch 문을 사용하는 사람들이 많이 생겨난 것입니다. 에러가 생겨도 catch 문에서 아무것도 하지 않고 넘어간다는 것은 치명적인 오류를 발생시킬 수 있으니 이 글을 읽으신 분들은 저처럼 우매한 생각은 넣어두시고 한번 더 try catch의 사용 용도를 생각해보시길 바랍니다.





참고사이트


  1.  예외, 예외클래스 구조, 예외 사용법 설명

  2.  Checked, Unchecked 에 대해 한번 더 생각해보게 해준 글





반응형
저작자표시 (새창열림)

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

[JAVA] 객체(Object)의 형 변환  (2) 2016.07.19
[JAVA] Static에 대하여  (0) 2016.07.19
[JAVA] JVM의 메모리구조  (0) 2016.07.19
[JAVA] 자바의 변수 (클래스 변수, 인스턴스 변수, 지역 변수)  (6) 2016.07.19
[JAVA] 절차지향언어와 객체지향언어  (0) 2016.07.19
[자바] 예외처리 (1) - 예외처리란?  (2) 2016.07.08
'Basic/Java' 카테고리의 다른 글
  • [JAVA] JVM의 메모리구조
  • [JAVA] 자바의 변수 (클래스 변수, 인스턴스 변수, 지역 변수)
  • [JAVA] 절차지향언어와 객체지향언어
  • [자바] 예외처리 (1) - 예외처리란?
에반황
에반황
"어른이면서 애이기도 하고 싶다."
에반황
에반, 어른반
에반황
전체
오늘
어제
  • 전체보기 (118)
    • About (1)
    • Backend (5)
      • Django (3)
      • Spring (2)
    • Database (2)
      • 아키텍처 (0)
      • SQL (0)
      • Redis (2)
      • 코딩 테스트 (0)
      • 요구 사항 해결 (0)
    • Infra, Cloud (0)
      • AWS (0)
      • GoCD (0)
      • Docker (0)
      • Kubernetes (0)
      • Mesos Marathon (0)
    • Basic (34)
      • C (1)
      • C# (4)
      • C++ (1)
      • Java (9)
      • Javascript (6)
      • Typescript (5)
      • GO (0)
      • Python (4)
      • 프로그래밍 기초 (1)
      • 게임 디자인 패턴 (1)
      • 운영체제 (0)
      • 알고리즘 (2)
      • 자료구조 (0)
    • Computer Science (0)
    • Frontend (74)
      • Swift (1)
      • Unity (31)
      • Android (13)
      • Vue.js (2)
      • Phaser (1)
      • Cocos2D JS (2)
      • Cocos Creator (16)
      • Facebook Instant Game (8)
반응형

인기 글

최근 댓글

hELLO · Designed By 정상우.v4.2.2
에반황
[자바] 예외처리 (2) - 예외클래스의 구조
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.