본문 바로가기
JAVA

자바 예외 처리(Exception)

by 우영11 2024. 9. 27.

자바 예외 처리는 체크예외와 언체크예외가 있다.

언체크예외는 RuntimeException 클래스를 상속받은 예외들이고,

체크예외는 RuntimeException 클래스를 상속받지 않는(Exception 클래스를 상속받음) 예외 클래스들이다.

 

출처 : https://starryeye.tistory.com/52

체크예외

체크예외는 복구 가능성이 있는 예외이므로 예외처리코드를 반드시 작성해줘야한다.

예외를 처리하기 위해서는 throw로 던지거나 catch로 잡아줘야한다.

 

- 체크예외는 처리하지 않으면 항상 throw로 던져줘야한다.

(상위 코드로 던짐, Exception코드에서 던지면 Main으로 던져져서 컴파일 오류로 보임)

public void send(String data) throws SendExceptionV3 {
    if(sendError){
    	throw new SendExceptionV3(data, address + " 서버에 데이터 전송 실패: "+data);
    }

    System.out.println(address + " 서버 연결 성공");
}

 

- 예외를 처리한다면 try~catch~finally 코드를 이용해서 처리한다.

(finally에서는 catch에서 잡지못하는 에러:RuntimeException에러 가 발생해도 여기있는 코드를 반드시 호출한 뒤에 종료시킨다.)

public void sendMessage(String data){
    String address = "http://example.com";
    NetworkClientV3 client = new NetworkClientV3(address);
    client.initError(data);

    try {
    	//정상흐름
        client.connect();
        client.send(data);
        
    } catch (ConnectExceptionV3 e) {
    	//원하는 출력
    	System.out.println("[연결 오류] 주소: "+e.getAddress()+", 메세지: "+e.getMessage());
        
    }finally{
    	//반드시 호출해야하는 마무리 흐름
    	client.disconnect();
        
    }
}

 

언체크 예외(런타임 예외)

처리해야하는 예외는 우리가 예상하는 것 외에 아주많기때문에 이 예외들을 모두 throws를 통해 던져줄수 없다.

대부분의 예외는 다 던져두고, 중요한 예외만 체크하는 식으로 예외를 처리하면 된다.

그래서 최근 라이브러리들은 대부분 런타임 예외를 사용한다.

 

언체크 예외는 throw로 처리하지 않아도 자동으로 상위클래스로 예외를 던져준다.

public class AAA extends RuntimeException{
    public AAA(String message) {
    	super(message);
    }
}

예외로직을 처리하는 폴더에 최상위 클래스에 RuntimeException을 상속받아준다.

RuntimeException을 상속받으면 하위클래스는 throws를 통해 던져줄 필요가 없고 코드가 더 간편해진다.

 

public void BBB(String data){
    .
    .
    
    try {
        client.connect();
        client.send(data);
    }finally{
    	client.disconnect();
    }
}

'JAVA' 카테고리의 다른 글

연결 리스트(Linked List)  (0) 2024.10.07
제네릭(Generic)  (0) 2024.09.29
메서드 인수에 메서드 넣기  (0) 2024.09.25
지역클래스, 익명클래스  (2) 2024.09.24
중첩, 내부클래스  (0) 2024.09.24