본문 바로가기
🌈 백엔드/객체 지향

JAVA_객체지향_ 예외 클래스

by 개발자 알마 2023. 2. 16.
반응형

 

 

[1] 예외 클래스 


(1) 프로그램 오류  

에러 error 프로그램 코드로 수십이 불가한 심각한 오류
예외 exception 프로그램 코드에 수십 가능한 미약한 오류
  • 컴파일 에러 : 컴파일 할때 발생하는 에러 
  • 런타임 에러 : 프로그램의 실행도중에 발생하는 에러 
  • 논리적 에러 : 실행은 되는데 의도와는 다르게 동작한다 

 

(2) 예외 클래스 계층 

 

(3) 각 요인에 따른 예외

 

사용자 요인에 따른 예외 개발자 요인에 따른 예외
존재하지 않는 파일의 이름을 입력했다  배열의 범위를 벗어나게 입력한다
클래스 이름을 잘못 적었다  null인 참조변수 멤버를 호출한다 
데이터 형식이 잘못되었다  형변환을 잘못했다 
  정수를 0으로 나눈다 

 

Exception 클래스와 자손 cheaked는 예외처리를 해주지 않으면 컴파일이 안된다 

RuntimeException 클래스와 자손 unckecked는 예외처리를 해주지 않더라도 컴파일이 가능하다 

차이점은 개발자 요인에 따른 예외이기 때문에 강제하지 않아 컴파일은 가능하다 

 

 

 

 

 

[2] 예외처리 


(1) 예외 처리 

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

 

(2) 예외 처리 방법 : try - catch 

try {

	예외가 발생할수 있는 문장을 넣는다 

} catch(Exception1 case1) {

	Exception1이 발생할경우 처리할 문장을 넣는다 
    
} catch(Exception2 case2) {

	Exception2이 발생할경우 처리할 문장을 넣는다 

}

 

 

  • 멀티 예외 처리방법 

상위클래스와 하위클래스를 혼합하지 않고 상위클래스만 사용한다 

멀티로 사용할 경우 catch 블럭 내에 어떤 예외가 발생한건지 확인이 어렵기 때문에 

상위 예외 클래스에 선언된 멤버만 사용한다  

try {

	예외가 발생할수 있는 문장을 넣는다 

} catch(Exception1 | Exception2 | Exception3 e) {

	Exception1이 발생할경우 처리할 문장을 넣는다 
    
}

 

(3) 예외 처리 방법 :  메서드에 예외 선언 

 메서드에 예외 선언시 어떤 종류의 예외가 발생할 가능성이 있는지 선언하면 이에 따른 처리를 강제할수 있다 

 void method() throws Exception1, Exception2 {
 	... 
 }

 

(4) finally

예외 발생여부에 상관없이 실행되어야할 코드를 포함시킨 예외처리문 

try {

	예외가 발생할수 있는 문장을 넣는다 

} catch(Exception1 e) {

	Exception1이 발생할경우 처리할 문장을 넣는다 
    
} finally {
	
    예외발생 여부 상관없이 수행하는 문장 
}

 

(5) 사용자 정의 예외 

class MyException extends Exception{
	MyException(String msg) {
    		super(msg);
    }
}

 

(6) 예외 되던지기 exception re-throwing 

예외가 발생할 가능성이 있는 메서드에서 try-catch문을 사용해서 예외를 처리해주고 catch문에서 필요한 작업을 행한 후 throw문을 사용해서 예외를 다시 발생시킨다. 다시 발생한 예외는 메서드를 호출한 메서드에게 전달되고 호출한 메서드의 try-catch문에서 예외를 또 처리한다. 

(7) 연결된 예외 

한 예외가 다른 예외를 발생시킨다 

 

 

(8) 예외 처리 과정 

예외가 발생하면 예외에 해당하는 클래스의 인스턴스가 만들어진다.

예외가 발생한 문장이 try블럭에 포함되어 있다면 예외를 처리할수 잇는 catch블럭이 있는지 찾는다 

첫번째 catch 블럭부터 참조변수의 종류, 생성된 예외클래스 인스턴스, instantceof연산자를 이용하여 검사한다 

검사결과가 true가 된 catch 블럭을 찾으면 예외처리를 수행한 후에 catch문을 빠져나가고 

검사결과가 true인 catch블럭을 못찾으면 예외 처리를 할수 없다 

 

 

(5) 강제 예외 발생 

 

 

 

 

[3] 예외 정보


(1) 예외 발생시 정보 조회 

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

 

 

 

class Ex {
	public static void main(String args[]) {
    
		System.out.println(1);
		System.out.println(2);
        
		try{
			System.out.println(3);
            
			System.out.println(0/0);
            
			System.out.println(4);
            
		} catch(ArithmeticException ae) {
        
				ae.printStackTrace();
                
				System.out.println(예외 메세지 + ae.getMessage());
		}
        
		System.out.println(6);
	}
}

 

 

 

 

 

finally

예외 발생여부와 관계없이 항상 실행되는 부분

try {

예외가 발생할수도 잇는 부분

} catch(예외 case1) {

}finally{

항상 실행되는 부분

}

 

throw 

예외를 발생시킴

 

..함수 이름 () {

throw new Exception();

 

 

throws 예외를 전가시킴

..함수이름() throws Exception {}

반응형

댓글