스터디할래 - 9주차 과제: 인터페이스

 https://github.com/whiteship/live-study

 

👍목표

 

자바의 인터페이스에 대해 학습하세요.

 

 

 

📖학습할 것 (필수)

 

  • 자바에서 예외 처리 방법 (try, catch, throw, throws, finally)
  • 자바가 제공하는 예외 계층 구조
  • Exception과 Error의 차이는?
  • RuntimeException과 RE가 아닌 것의 차이는?
  • 커스텀한 예외 만드는 방법

 

 


자바에서 예외 처리 방법 (try, catch, throw, throws, finally)

 

try - catch - finally

 

try 영역에는 예외가 발생 될 가능성이 있는 코드가 위치하며, catch 블록에는 예외가 발생했을 때 동작하는 코드가

 

위치한다. finally 블록은 예외 발생 여부와 관계없이 실행되는 코드들이 위치하며,  try와 catch에서 return이 발생하더라

 

도 finally는 실행된다. try 와 catch는 쌍으로 묶여서 반드시 작성해야 하는 코드 이지만, finally의 작성은 선택이 가능하

 

다.

 

/* 정상 실행 되었을 경우*/
/* try 영역 실행 후 finally 영역 실행*/

try {
	// 예외 발생 가능 코드
} catch(예외클래스 e) {
	// 예외 처리
} finally {

	// 항상 실행
}

 

/* 예외가 발생되었을 경우 */
/* try 영역 실행에서 예외가 발생하면 catch 구문의 코드가 실행 되고 finally 영역 실행 */

try {
	// 예외 발생
} catch(예외클래스 e) {
	// 예외 처리
} finally {

	// 항상 실행
}

 

 

 

public class Main {
	public static void main(String[] args) {
    	try {
        	Class clazz = Class.forName("java.lang.Stringgggg");
        } catch(ClassNotFoundException e) {
        	System.out.println("해당 클래스가 존재하지 않습니다.");
            return;
        } finally {
        	System.out.println("클래스 이름을 다시 확인");
        }
    }
}
Output:
해당 클래스가 존재하지 않습니다.
클래스 이름을 다시 확인

 

위의 코드는 Stringgggg클래스가 존재하는지 확인하는 코드로 Stringgggg는 존재하지 않는 클래스 이므로 예외를 발생

 

시키며 catch 구문의 코드가 실행되고 return을 하더라도 finally 코드까지 실행된다.

 

 

throws, throwable

 

메서드 내부에서 예외가 발생할 수 있는 코드를 작성할 때 try-catch로 예외를 처리할 수 있지만, throws를 사용하여

 

메서드를 호출한 곳으로 예외를 넘기는 방법이 존재한다. throws는 메서드 선언부 끝에 작성 되어 예외를 호출한 곳으로

 

떠넘길 수 있다.

 

반환 타입 메서드명(파라미터) throws 예외클래스1, 예외클래스2, ... {
}

 

 

public void func1() {
	try {
    	func2();
    } catch (ClassNotFoundException e) {
    	
        // 예외 처리
        System.out.println("클래스가 존재하지 않습니다.");
    }
}

public void func2() throws ClassNotFoundException {
	Class clazz = Class.ForName("java.lang.Stringgggg");
}

func2에서 발생한 예외를 func2를 호출한 func1로 예외처리를 넘겨 처리하는 것을 볼 수 있다.

 

 

Throwable은 Object 클래스를 상속받는 클래스 중 예외 처리의 최상위 클래스이다. Error와 Exception은

 

아래의 예외 계층 구조에 나와 있듯이 Throwable을 상속 받아 구현 되어 있다.

 

 

 

자바가 제공하는 예외 계층 구조

 

 

자바의 에러와 예외는 Throwable 클래스를 상속 받으며 예외는 크게 컴파일 타임 예외(Compile time Exception) 와 런

 

타임 예외(Runtime Exception)가 존재한다. 

.

 

 

 

 

Exception과 Error의 차이는?

 

Error란 컴퓨터 하드웨어의 고장 또는 오동작으로 인해 응용 프로그램 실행 오류가 발생하는 것을 말하며, 자바에서는

 

JVM 실행에 문제가 생겼다는 것이고, 실행 불능이 된다. 

 

 

Exception이란 사용자의 잘못된 조작 또는 프로그램을 개발한 개발자의 잘못된 코딩으로 인해 생기는 프로그램의 오류

 

를 말한다. 

 

 

Exception이 발생하면 Error와 마찬가지로 프로그램이 종료된다는 공통점이 있는 반면  Exception은 Exception

 

Handling(예외 처리)를 통해 프로그램을 종료하지 않고 정상적인 실행 상태가 유지되도록 할 수 있다는 차이점이 존재한

 

다.

 

 

RuntimeException과 RE가 아닌 것의 차이는?

 

자바에서의 예외는 checked exception인지 Unchecked exception인지로 나눌 수 있지만 Runtime Exception과 Runtime

 

Exception이 아닌 Compile time Exception으로도 나눌 수 있다.  Runtime Exception은 Unchecked Exception으로 예외

 

처리를 강제시키지 않는 반면 Compile time Exception은 Checked Exception으로 반드시 예외처리를 해야 한다는 특징

 

이 있다.

 

 

커스텀한 예외 만드는 방법

 

커스텀한 예외란 사용자가 정의한 예외로 프로그램을 개발하다 보면 자바 표준 API에서 제공하는 예외만으로 처리하기

 

불가능한 상황이 올 수 있는데, 이러한 문제에 직면했을 때 사용자가 예외와 예외처리 동작을 정의 할 수 있다. 

 

public class xxException extends [Exception | RuntimeException] {
	public xxException() {}
    public xxException(String message) {super(message);}
}

 

커스텀 예외의 클래스 이름은 Exception으로 정의하는 것이 관례이며 커스텀 예외 클래스도 클래스이므로 필드, 생성자,

 

메서드 선언 등을 포함할 수 있지만, 대부분 생성자 선언만을 포함한다. 생성자는 일반적으로 2개를 작성하는데

 

기본 생성자와 예외 메시지를 전달하기 위한 String 타입의 파라미터를 갖는 생성자이다. 예외 메시지를 상위 클래스의

 

생성자를 호출하여 넘겨주며 예외 메시지는 catch 블록의 예외 처리 코드에서 사용하기 위함이다.

 

 

 

References

이것이 자바다(신용권 저)
reference-m1.tistory.com/246(예외 계층 구조)
TCP School