☕JAVA/🐣 강의 [JAVA]

[JAVA][기초] 예외처리

디카페인라떼 2022. 11. 9. 18:55

[기초] 시리즈는 본강의를 수강후 정리한 글들 입니다.

Java for Beginner - YouTube

 

Java for Beginner

[교재 link] https://github.com/namoosori/java-for-beginner/tree/master/doc Java for Beginner 강의에서 다루는 내용은 다음과 같습니다. - Java 개요 : Java 언어가 어떤 언어이고 Java 언어를 이용해 프...

www.youtube.com


💡예외처리란?

  • 예외 : 프로그램 실행 도중에 발생하는 '예외적인 상황'이며, 이러한 상황을 처리하는 것이 예외처리.
    • 예외적인 상황
      •  파일을 읽으려고 하는데 해당 파일이 존재하지 않는 경우
      •  나눗셈을 하려고 두 수를 입력 받았는데 제수가 0인 경우
  • Java 에서는 예외처리를 위한 문법을 제공 (try ~ catch 문)
    • if문을 이용한 예외처리의 문제점
    •  if문을 이용하여 예외처리를 할 경우 프로그램의 주 흐름을 구성하는 코드와 예외처리 코드가 혼재되어 코드가 복잡해짐. 

💡예외 클래스의 종

예외클래스의 종류

  • 최상위 클래스 : Throwable 클래스
  • 하위에는 Exception과 Error
    •  Error 클래스
      •  Error클래스를 상속한 클래스들은 매우 심각한 오류상황
      •  자바 프로그램 외에서 발생한 오류로 프로그램 내에서 해결 불가능
      • ex) OutOfMemory 등..
    • Exception 클래스
    • RuntimeException 계열의 예외를 Unchecked Exception이라하고 그외의 것들을 Checked Exception이라고 함.
      •  Checked Exception IOException
        •  반드시 예외처리가 강제됨
        •  예외처리를 하지 않으면 컴파일 에러가 나타남.
      •  Unchecked Exception = RuntimeException
        •  Exception 클래스와 달리 try ~ catch 문 또는 throws 절을 이용한 예외처리가 필요하지 않음.

💡 try ~ catch 구문

  • Java는 예외처리를 위하여 try ~ catch 문을 제공함.
    • try 블록은 예외가 발생할 수 있는 영역을 감싸고, catch 블록에는 발생한 예외를 처리하는 코드를 작성
      •  try{} 예외 발생시 => catch ( 예외종류 ){}
    •  try 영역에서 발생하는 예외가 여러 개인 경우 다수의 catch문 작성가능
    •  Java7 부터는 다중 예외 처리를 위한 파이프 (|) 제공
    •  예외 발생 여부와 상관없이 항상 실행해야 할 코드가 있는 경우 finally 구문 사용

💡 사용자 정의 예외 클래스

  • 문법적으로 문제가 되는 상황에서는 JVM이 적절한 예외를 발생시킴. 그러나 논리적으로 문제가 되는 경우에는 상황에 맞는 예외클래스를 직접 작성해야함.
    •  예외 클래스 작성 방법
      •  Exception 클래스를 상속
      •  예외클래스의 생성자에 메시지를 추가
      •  throw 키워드
        •  예외가 발생 했음을 JVM에 알리기 위해 사용
        •  문법 : throw 예외 클래스의 인스턴스;
      •  예외의 전파 throws
        •  발생된 예외상황을 메소드를 호출한 곳으로 전달하기 위해 사용
public class NotAvailableAgeException extends Exception {
public NotAvailableAgeException() {
super("유효하지 않은 나이가 입력되었습니다");
	}
}
public class AgeInputExample {
public static void main(String[] args) {
System.out.print("나이를 입력하세요 : ");
try {
int age = readAge();
System.out.println("당신의 나이는" + age + "세 입니다.");
} catch (NotAvailableAgeException e) {
System.out.println(e.getMessage());
	}
}
private static int readAge() throws NotAvailableAgeException {
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
if (age < 0) {
throw new NotAvailableAgeException();
		}
return 0;
	}
}

 

더보기