상세 컨텐츠

본문 제목

[JAVA]예외 처리

JAVA Language

by mobile 2012. 7. 28. 22:34

본문

반응형

1.1 예외가 주로 발생하는 원인은?


- 사용자가 잘못된 데이터를 입력하는 경우

: 고의성은 없지만, 단순히 데이터를 잘못 입력하는 경우에도 프로그램은 심각한 오류를 일으킬 수 있을 겁니다.


- 개발자가 로직이나 계산을 잘못 작성한 경우

: 연산 작업에서 코드를 잘못 작성했으나 컴파일에서는 문제가 없었으므로 발견하지 못하는 경우


- 하드웨어나 네트워크가 제대로 동작하지 못하는 경우


- 악의적으로 잘못된 연산을 요구하거나 시스템을 공격하는 경우

Error 와 Exception를 구분하는 기준

- 에러는 발생하면 개발자가 어떻게 조치할 수 없는 수준을 의미. 예를들어 메모리가 부족하거나, JVM의 동작 이상이 발생하는 경우가 대표적

- 예외는 JVM은 정상적으로 동작하고 있기 때문에 다른 방식으로 처리하는 것을 예외하고 합니다. 예를 들어 실행되는 프로그램의 입력 값이 잘못되었다거나 네트워크에 문제가 생기는 등, JVM 자체에는 문제가 없는 상황.


2.1 Exception의 두가지 종류

- Checked Exception : 예외 처리를 하지 않으면 컴파일을 허락하지 않는 예외, 주로 외부 리소스와 통신하는 경우는 반드시 Checked Exception이라고 생각

- Unchecked Exception : 컴파일 시에 체크되지 않고, 실행 시(Runtime)에 발생하는 Exception을 말합니다. 개발자들이 작성하는 로직에 의해서 처리해야 하는 예외입니다.


3.1 가장 흔하게 보는 예외 들

- 실제 레퍼런스가 가리키는 객체가 없는 상태에서 강제로 동작을 시키는 NullPointerException

- 배열과 유사한 자료구조에서 범위를 벗어난 인덱스 번호를 사용하는 XXXOutOfBoundsException

- 문자열이나 숫자/날짜 변환 시에 잘못된 데이터를 발생하는 XXXFormatException


4.1 Exception 클래스

:Exception 클래스는 부모 클래스인 Throwable 클래스에서 모든 메소드를 물려 받습니다.

- printStackTrace() : 발생한 Exception의 출처를 메모리상에서 추적하면서 결과를 알려줍니다. 즉 예외가 발생한 위치를 정확히 화면에 출력해주기 때문에 가장 많이 쓰이고, 이클립스가 자동으로 완성시켜주는 코드도 이 메소드를 사용하고 있습니다. 다만 리턴타입이 void 이기 때문에 보이는 메시지를 다른 방식으로 응용할 수 없다는 불편함이 있습니다.


- getMessage() : printStackTrace()가 상세한 내용이라면 getMessage()는 한줄로 요약된 요약 메시지를 String으로 반환해 줄 수 있습니다. 주료 예외의 근본적인 원인만을 어디선가 사용할 필요가 있을 때 많이 사용 합니다.


- getStackTrace() : JDK1.4 부터 지원하는 기능으로 printStackTrace()의 단점을 보완하기 위해서 나온 개념입니다. 이것은 printStackTrace()가 그냥 콘솔 창에 출력만 되기 때문에 별도로 문자열을 만들 때 getStackTrace()를 이용하여 문자열로 변경해서 처리합니다.


반응형

관련글 더보기

댓글 영역