면접준비(7)예외처리

Tae hyun·2023년 4월 11일
0

면접준비

목록 보기
7/9

출처: 자바의 정석 3판 ch8예외처리 p 414~434
에러: 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
예외: 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
둘다 런타임에러

예외처리의 정의와 목적
정의: 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
목적: 프로그램의 비정상 종료를 막고 정상적인 실행상태를 유지하는 것

처리하기. try-catch문

try블럭안에는 예외가 발생할 가능성이 있는 문장들을 넣고,
catch(Exception1 e1) 블럭안에는 Exception1이 발생했을 경우, 이를 처리하기 위한 문장들을 넣음

try블럭 내에서 예외가 발생한 경우
-1. 발생한 예외와 일치하는 catch블럭이 있는지 확인
-2.일치하는 catch블럭을 찾게되면, 그 catch블럭 내의 문장들을 수행하고 전체 try-catch문을 빠져나가서 그 다음 문장을 계속해서 수행. 만일 일치하는 catch블럭을 찾지 못하면 예외는 처리되지 못하고 프로그램이 비정상종료됨

try블럭내에서 예외 발생안한경우
-catch블럭을 거치지 않고 전체 try-catch문을 빠져나가서 수행을 계속함

printStackTrace()와 getMessage()

printStackTrace(): 예외 발생 당시의 호출스택에 있었던 메서드의 정보와 예외 메시지를 화면에 출력
getMessage() 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수있다.

멀티 catch블럭
catch블럭안의 내용이 같을 경우 하나로 합침

try{
...
}catch(ExcepitonA e){
 e.printStackTrace();
 }catch(ExceptionB e2){
 	e2.printStackTrace();
    }
    //하나로 합치면
    try{
    ...
    }catch(ExceptionA | ExceptionB e){
    e.printStackTrace();
    } 

예외 발생시키기
1. 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든다음
Exception e = new Exception("고의로 예외발생시킴");
2. 키워드 throw를 이용해서 예외를 발생시킴
throw e;
한줄로 줄이면 throw new Exception

Exception클래스의 자손은 checked예외로 예외처리가 필수이다.
RuntimeException자손은 unchecked예외로 예외처리가 필수가 아닌 선택이다. 근데 그만큼 더 조심해서 코딩해야함.

eclipse에서 checked예외를 예외처리안해주면 빨간줄이 떠서 반드시 예외처리해줘야함
unchecked예외는 빨간줄은 안뜨는데 실행시 에러가 발생할 수있다.

메서드 예외 처리방법: try-catch문: 직접처리
예외선언하기: 예외떠넘기기(알리기)
은폐->catch블럭에 아무것도 넣지 않는다.
=빅데이터 처리할때 사용됨

예외처리 예시

import java.io.File;

public class ThrowExceptionClass {
	public static void main(String[]args) {
		
	try {
		File f = createFile(args[0]);
		System.out.println(f.getName()+"파일이 성공적으로 생성되었습니다.");
		
	} catch(Exception e) {
		System.out.println(e.getMessage()+"다시 입력해주시기 바랍니다.");
	}
		
	}
	static File createFile(String fileName)throws Exception{
		if(fileName==null || fileName.equals(""))
			throw new Exception("파일이름이 유효하지 않습니다.");
	 File f = new File(fileName);
	 f.createNewFile();
	 return f;
	}
}

실행방법: 이클립스 메뉴바에 run탭에서 run configuration을 클릭한후 argument에 파일명을 입력한다.

실행결과

조금 다르게 변경할 수도 있다.

import java.io.File;

public class ThrowExceptionClass {
	public static void main(String[]args) {	
		File f = createFile(args[0]);
		System.out.println(f.getName()+"파일이 성공적으로 생성되었습니다.");
	}
	static File createFile(String fileName){
		try{
        if(fileName==null || fileName.equals(""))
			throw new Exception("파일이름이 유효하지 않습니다.");
        }catch(Exception e){
        fileName = "제목없음.txt";
        }
        File f = new File(fileName);
        try{
         f.createNewFile();
        }catch(IOException e){
        e.printStackTrace();
        }
	 return f;
	}
}

finally블럭
:예외 발생여부와 관계없이 수행되어야 하는 코드를 넣는다.

try{
startInstall();
copyFiles();
deleteTempFiles();
} catch(Exception e){
	e.printStackTrace();
    deleteTempFiles();
    }
    //finally를 사용햐면 중복코드를 없앨 수 있다.
    try{
startInstall();
copyFiles();

} catch(Exception e){
	e.printStackTrace();
    }finally{
    deleteTempFiles();
    }
profile
안녕하세요 개발하는 알파카입니다. https://github.com/oh-taehyun

0개의 댓글