객체 지향 자바 프로그래밍 - 예외처리

awarduuu·2023년 3월 28일
0

230328

※ 추가 개념 : private 생성자

외부에서 생성자를 직접 생성하지 못하도록 하기 위해 사용

public class Test{
	private static Test instance = new Test();
	private Test(){}
    
    // 현재 객체를 생성해서 리턴하는 메소드를 만든다.
    public static Test getInstance(){
    	return instance;
    }

}

public class App {

	public static void main(String[] args) {
    	Test t = new Test(); // 오류
        
        // 오류 안남 but t1과 t2는 동일하다. Test의 멤버필드인 instance를 가리키기 때문이다.
        Test t1 = Test.getInstance(); 
        Test t2 = Test.getInstance();
    }
}

예외처리

Exception 종류

  1. 체크 예외 : 컴파일에 오류 발생 (반드시 예외처리 필수)
  2. 비체크 예외 : 실행 도중 발생하는 예외 (예외처리 선택)

Exception 처리 방법

1. 직접처리 : try catch


try{
	// 발생 가능성이 있는 코드 작성;
}catch(XxxException e){ // catch 여러개 작성할때는 반드시 최하위 서브클래스부터 작성해야한다.
	// 예외1 발생 했을 때 해야하는 일 작성;
}catch(XxxException e){
	// 예외2 발생 했을 때 해야하는 일 작성;
}catch(XxxException e){
	// 예외3 발생 했을 때 해야하는 일 작성;
}finally{
	// 예외 발생 여부와 상관없이 무조건 실행해야하는 일 작성
}

// 아래와 같이 사용도 가능, 단 catch와 finally는 항상 try와 함께 사용
try {
} finally{
}

try {
} catch(XxxException e){
}
  • e.toString()

    예외 클래스 : 예외 메시지로 구성

  • e.getMessage()

    예외메시지 가져오는 메소드

  • e.printStackTrace()

    예외메시지를 Stack 저장하고 Stack에 저장된 메시지를 꺼내서 출력해주는 메소드

    ※ e.printStackTrace() 이용 주의 사항

      - 개발할 때 예외가 발생하면 예외에 대한 정보를 정확하게 추적할 수 있는 정보를 제공한다.
      - 배포할 때 (운영환경 - production) 반드시 제거해야 한다. secure code 가이드라인에 의거하여 보안을 위해서!!!
      
  • throw

    강제로 예외를 발생시킨다.

2. 던지기(위임) : throws

메소드를 호출한 주체에게 예외를 위임하는 것, 메소드 선언부에 작성

  • 이유 : 각 상황에 해당하는 예외를 한 영역에서 한 번에 처리하도록 하기 위해서

사용자 정의 Exception

원하는 예외를 만들기 위해 Exception을 상속받아 사용자 정의 Exception class를 만들 수 있다.


// 체크 예외
class XxxException extends Exception {

	XxxException(){}
    
    XxxException(String message){
    	super(message); // Exception(String message) 생성자 사용
    }

}

// 비체크 예외
class XxxException2 extends RuntimeException {

}

new XxxException();
new XxxException("오류 메시지");
profile
선한 영향력을 만드는 개발자

0개의 댓글