본문 바로가기
BACK-END/JAVA

예외

by 썬키 2021. 12. 1.

21.12.01
: 예외

1.예외와 예외 클래스
①오류의 종류
1)에러
ㆍ하드웨어의 오동작 또는 고장으로 인한 오류
ㆍ에러가 발생되면 프로그램 종류
ㆍ정상 실행 상태를 돌아갈 수 없음
2)예외
ㆍ사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인한 오류
ㆍ예외가 발생되면 프로그램 종료
ㆍ예외 처리를 추가하면 정상 실행 상태로 돌아갈 수 있음

②예외의 종류
1)일반(컴파일 체크)예외(Exception)
ㆍ예외 처리 코드가 없다면 컴파일이 되지 않는 예외
2)실행 예외(RuntimeException)
ㆍ예외 처리 코드를 생략하더라도 컴파일이 되는 예외
ㆍ경험에 따라 예외 처리 코드를 작성할 필요

③예외 클래스
java.lang.Exception (부모 클래스)


2. 실행 예외(RunTimeException)
①NullPointerException
1)객체  참조가 없는 상태, 즉 null 값을 갖는 참조 변수로 객체 접근 연산자인 
도트(.)를 사용했을 때 발생

②ArrayIndexOutOfBoundsException
1)배열에서 인덱스 범위를 초과하여 사용할 경우 발생

③NumberFormatException
1)문자열을 숫자로 변환하는 경우가 많다.
2)숫자로 변환될 수 없는 문제가 포함되어 있을 경우  발생

④ClassCastException
1)타입 변환이 되지 않을 경우 발생
2)정상 코드
Animal animal = new Dog();
Dog dog = (Dog) animal;
3)예외 발생 코드
Animal animal = new Dog();
Cat cat = (Cat) animal;

3.예외 처리 코드(try-catch-finally)
①예외 처리 코드란
1)예외가 발생하면 프로그램 종료를 막고, 정상 실행을 유지할 수 있도록 처리하는 코드
2)try - catch -finally 구문을 이용해서 예외 처리 코드를 작성한다.

try{
예외 발생 가능 코드
↓(예외 발생시)
}catch(예외클래스 e){
예외처리
↓(예외 발생하지 않을시)
}finally{
항상 실행;
}



4.예외 종류에 따른 처리 코드

try {
ArrayIndexOutOfBoundException 발생
NumberFormatException 발생

}catch(ArrayIndexOutOfBoundException e){
예외 처리 1

}catch(NumberFormatException e){
예외 처리2

}



5.자동 리소스 닫기
①try-with-resources
1)예외 발생 여부와 상관없이 사용했떤 리소스 객체의 close() 메소드를 호출해서 
안전하게 리소스를 닫아준다.
2)리소스 객체의 조건
: java.lang.AutoCloseable 인터페이스를 구현하고 있어야 한다.

6.예외 떠 넘기기
①throws
1)메소드 선언부 끝에 작성
2)메소드에서 처리하지 않은 예외를 호출한 곳으로 떠 넘기는 역할

public void method1(){
try{
method2();
}catch(ClassNotFoundException e){
//예외 처리 코드
System.out.println("클래스가 존재하지 않습니다.");
}
}

public void method2()  throws ClassNotFoundException{
Class clazz = Class.forName("java.lang.String2");
}



7.사용자 정의 예외와 예외 발생
①사용자 정의 예외 클래스 선언
1)자바 표준 API에서 제공하지 않는 예외
2)애플리케이션 서비스와 관련된 예외
ex)잔고 부족 예외, 계좌 이체 실패 예외, 회원 가입 실패 예외....
3)사용자 정의 예외 클래스 선언 방법

public class XXXException extends [ Excpetion | RuntimeException ] {
public XXXException() {}
public XXXException(String message) { super(message); }





②예외 발생 시키기

throw new XXXException()
throw new XXXException("메시지");

public void method() throws XXXException {
throw new XXXException("메시지");
}


8.예외 정보 얻기
①getMessage()
1)예외를 발생시킬 때 생성자 매개값으로 사용한 메시지를 리턴
throw new XXXException("예외 메시지");
2)좀 더 상세 원인을 세분화 하기 위해 예외 코드를 포함 (ex: DB 예외 코드)
3)catch() 절에서 활용

②printStackTrace()
1)예외 발생 코드를 추적한 내용을 모두 콘솔에  출력한다.
2)프로그램을 테스트하면서 오류를 찾을때 활용된다.

'BACK-END > JAVA' 카테고리의 다른 글

Thread, 제네릭, 컬렉션 프레임워크  (0) 2021.12.06
API  (0) 2021.12.02
인터페이스  (0) 2021.12.01
추상 클래스  (0) 2021.11.30
상속  (0) 2021.11.29

댓글