[JAVA]오버라이딩 및 오버로딩의 예외

Inung_92·2023년 2월 12일
1

JAVA

목록 보기
7/15
post-thumbnail

오버라이딩의 예외처리 주요 제한사항

오버라이딩은 상속 또는 구현관계에 있는 객체가 상위 객체의 메서드를 재정의하여 사용하는 메서드 정의 기법이다. 재정의하여 사용해야하는 이러한 메서드 정의 기법에서 예외처리 시 어떤 제한사항이 있는지 알아보자.

⚡️ '새로운' 예외는 Throws 할 수 없음

해당 제한사항에서는 '새로운'이라는 키워드에 집중해야한다. 만일 상위 객체가 예외를 throws하지 않은 메서드를 보유하고 있으며, 하위 객체가 이 메서드를 재정의 할 경우 '새로운' throws를 선언 할 수 없다는 것이다.

🖥️ 예시

//Super class
public class Parent{
	//메서드 정의
	public void test() throws TestException{ //throws 명시
    }
}

//Sub class
public class Child extends Parent{
	//메서드 오버라이딩
    public void test() throws TestException{ //throws 명시
    }
}

위 처럼 상위 객체가 throws를 선언했다면 하위 객체에서도 throws를 선언하여 예외를 던질 수 있는 것이다. 아래는 잘못된 예시다.

//Super class
public class Parent{
	//메서드 정의
	public void test() { //throws X
    }
}

//Sub class
public class Child extends Parent{
	//메서드 오버라이딩
    public void test() throws TestException{ //throws 명시
    }
}

⚡️ 예외를 상위 객체보다 많이 선언할 수 없다.

위의 '새로운'과 거의 유사하다. 만일 슈퍼 클래스가 IOException만 오버라이드할 메서드에 선언했다면 자식 메서드도 해당 예외 처리만 가능한 것이다. 아래 코드를 보자.

//Super class
public class Parent{
	//메서드 정의
	public void test() throws IOException, SQLException{ //예외 2개 선언
    }
}

//Sub class
public class Child extends Parent{
	//잘못된 예시 1. 예외 불일치
    public void test() throws TestException{
    }
    //잘못된 예시 2. 상위 예외처리
    public void test() throws Exception{
    }
}

위 코드에 대해서 잘못된 예시의 설명을 보자.

  • 잘못된 예시 1 - 예외 내용 불일치는 상위 객체가 선언한 예외와 동일하지 않은 예외는 처리될 수 없다.
  • 잘못된 예시 2 - 상위 객체가 Exception(예외 최상위 클래스)를 상속하는 하위 예외를 선언한 경우 하위 객체는 상위 객체가 선언한 예외보다 상위의 예외는 선언할 수 없다.

오버로딩의 예외처리 주요 제한사항

오버 로딩은 안타깝게도(?) 예외처리에 대한 규칙이나 조건은 없다. 따라서 오버로딩을 사용하는 경우에는 예외처리는 고려하지 않고 나머지 조건 및 규칙들만 신경쓰면 되는 것이다.

그럼 이만.👊🏽

profile
서핑하는 개발자🏄🏽

0개의 댓글