코드 그라데이션

try-catch 이론 본문

Java/개념 정리

try-catch 이론

완벽한 장면 2023. 2. 25. 10:21

예외처리 관련

프로그램 실행 중 예기치 못한 사건을 예외라고 한다. 예외 상황을 미리 예측하고 처리하는 것을 예외처리라고 한다.

기본적으로 런타임 시점에서 발생하는 오류는 에러(error) 예외(exception)으로 나뉜다.

 

 

에러(Error)

: 메모리 부족(OutOfMemoryError)이나 스택오버플로우(StackOverflowError)와 같이 일단 발생하면 복구할 수 없는 심각한 오류

예외(exception)

: 인자값 Null 에러NPE(NullPointException)같은 발생하더라도 수습이 가능한 덜 심각한 오류.

 

실행 예외 (RuntimeException)

Runtime Error: 프로그램 실행 시점에서 발생하는 에러로 컴파일러는 컴파일 시점에서 문법 오류나 오타같은 컴파일시점에서 예측가능한 오류는 잡아줄 수 있지만, 실행 중 발생할 수 있는 잠재적인 에러까지 잡을 순 없다. 그래서 컴파일은 문제없이 완료되어 프로그램 실행이되고 실행도중 의도치않은 동작에 대처하지못해 에러가 발생할 수 있다.

 

예외가 발생하면 JVM은 해당하는 실행 예외 객체를 생성

실행 예외는 컴파일러가 예외 처리 여부를 확인하지 않음. 따라서 개발자가 예외 처리 코드의 추가 여부를 결정

 

실행 예외 예시

실행 예외 발생 이유
ArithmeticException 0으로 나누기와 같은 부적절한 산술 연산을 수행할 때 발생
IllegalArgumentException 메서드에 부적절한 인수를 전달할 때 발생
IndexOutOfBoundsException 배열, 벡터 등에서 범위를 벗어난 인덱스를 사용할 때 발생한다.
NoSuchElementException 요구한 원소가 없을 때 발생한다.
NullPointerException null 값을 가진 참조 변수에 접근할 때 발생한다.
NumberFormatException 숫자로 바꿀 수 없는 문자열을 숫자로 변환하려 할 때 발생한다.  )10

 

일반 예외

Compile Error

: 컴파일 시점에서 발생하는 에러로 소스코드를 컴파일러가 컴파일하는 시점에서 소스의 오타나 잘못된 구문, 자료형 체크등 검사를 수행하는데 여기서 발생하는 에러를 컴파일 에러라 하며 이 시점에서 발생하는 문제들을 수정 후 컴파일을 성공적으로 마칠경우 클래스 파일 (*.class) 이 생성된다.

 

컴파일러는 발생할 가능성을 발견하면 컴파일 오류를 발생

개발자는 예외 처리 코드를 반드시 추가

 

대표적인 일반 예외 예

일반 예외 발생 이유
ClassNotFoundException 존재하지 않는 클래스를 사용하려고 할 때 발생한다.
InterruptedException 인터럽트 되었을 때 발생한다.
NoSuchFieldException 클래스가 명시한 필드를 포함하지 않을 때 발생한다.
NoSuchMethodException 클래스가 명시한 메서드를 포함하지 않을 때 발생한다.
IOException 데이터 읽기 같은 입출력 문제가 있을 때 발생한다.

     어떤 Exception이 발생할지 모를 때는 catch(Exception e)와 같이 Exception 클래스를 이용.

 

Logical Error

: 소스 코드 컴파일도 정상적으로 되고 런타임상 에러가 발생하는 것도 아닌 개발자의 의도와는 다르게 동작하는 에러를 뜻한다. 버튼을 클릭하면 팝업이 뜨게 만들었으나 팝업이 아닌 새로운 페이지가 뜨거나 아무동작을 안하거나 하는 것처럼 시스템상 프로그램이 멈추거나 하지는 않지만, 의도와는 다르게 동작하는 것을 말한다.

 

예외 처리하는 방법

try { // ...}
catch (Exception error) {// ...}
finally {// 필수 실행 구문}

 

참고) parseInt

parseInt("10"); // 10 문자열 "10"을 숫자로 변환하여 정수 10을 리턴합니다.  

parseInt("-10"); // -10 문자열 "-10"을 숫자로 변환하여 정수 음수 -10을 리턴합니다.  

parseInt("10.9"); // 10 문자열 타입의 실수값은 소수점을 제거한 후, 정수값만 리턴합니다.  

parseInt(10); // 10

 

printStackTrace() getMessage()

 예외 발생시 예외에 대한 정보를 printStackTrace() getMessage()를 통해 얻을 수 있다.

 

printStackTrace()

 예외 발생 당시 호출스택(Call Stack)에 있었던 메서드의 정보와 예외 메세지를 화면에 출력.

 

getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메세지를 얻을 수 있다.

728x90

'Java > 개념 정리' 카테고리의 다른 글

[보충] 전위 연산자와 후위 연산자  (0) 2023.03.20
참조형  (0) 2023.01.13
조건문과 반복문  (0) 2023.01.13
배열  (1) 2023.01.13
연산자 우선순위  (0) 2023.01.13
Comments