Skip to content
난이도 출제 빈출문제은행 6

Java 추상 클래스·인터페이스·예외 ​

추상 클래스(abstract class)와 인터페이스(interface)는 "무엇을 해야 하는지"만 정하고 구현은 자식에게 맡기는 장치다. 예외 처리(exception handling)는 실행 중 문제가 생겼을 때 프로그램이 바로 멈추지 않고 대응하게 하는 문법이다. 시험은 try·catch·finally가 어떤 순서로 실행되는지와 상황에 맞는 예외 클래스 이름을 자주 묻는다.

추상 클래스와 인터페이스 ​

추상 메서드(abstract method)는 본문 없이 선언만 있는 메서드다. 이런 메서드를 하나라도 가진 클래스는 abstract를 붙여야 하고, 직접 new로 객체를 만들 수 없다. 자식 클래스가 추상 메서드를 모두 구현해야 비로소 객체를 만들 수 있다. 공통 코드는 부모에 두고, 달라지는 부분만 자식에게 강제할 때 쓴다.

인터페이스는 클래스가 지켜야 할 메서드 목록이다. 클래스는 implements로 인터페이스를 구현한다. 클래스 상속(extends)은 하나만 되지만 인터페이스는 여러 개를 동시에 구현할 수 있어, 서로 관련 없는 클래스에 같은 기능을 약속시킬 때 알맞다.

구분추상 클래스인터페이스
키워드abstract class, extendsinterface, implements
다중 상속불가여러 개 구현 가능
필드일반 필드 가능상수만(public static final)
객체 생성불가불가

인터페이스의 메서드는 따로 적지 않아도 public abstract다. Java 8부터는 기존 구현 클래스를 건드리지 않고 기능을 추가할 수 있도록, 본문이 있는 default·static 메서드도 둘 수 있다.

try·catch·finally ​

예외(exception)가 try 블록에서 생기면 그 뒤 코드는 건너뛰고 형이 맞는 첫 catch 블록으로 간다. finally 블록은 예외가 났든 안 났든, 심지어 try나 catch 안에서 return을 만나도 빠져나가기 직전에 반드시 실행된다. 파일 닫기처럼 꼭 해야 하는 정리 작업을 여기에 둔다.

java
static int run(int d) {
    try { System.out.print("T"); return 10 / d; }
    catch (ArithmeticException e) { System.out.print("C"); return -1; }
    finally { System.out.print("F"); }
}
// run(2) → TF, 반환 5 / run(0) → TCF, 반환 -1

catch는 위에서부터 검사하므로 Exception 같은 상위 예외를 먼저 두면 아래의 구체적인 catch에 닿을 수 없어 컴파일 오류가 난다. 구체적인 예외를 위에, 넓은 예외를 아래에 둔다.

주요 예외 클래스 ​

예외원인
ArithmeticException정수를 0으로 나눔
ArrayIndexOutOfBoundsException배열 범위 밖 인덱스
NullPointerExceptionnull 참조의 멤버 사용
NumberFormatException숫자로 못 바꾸는 문자열 변환
NegativeArraySizeException음수 크기 배열 생성
IllegalArgumentException메서드에 잘못된 인자를 넘김
ClassNotFoundException클래스를 찾지 못함
NoSuchMethodException메서드를 찾지 못함
FileNotFoundException파일을 찾지 못함
InterruptedIOException입출력 작업이 중단됨

NumberFormatException은 IllegalArgumentException의 자식 클래스라, 둘 다 catch에 적으면 NumberFormatException을 위에 둬야 한다. 실수형 나눗셈 5.0 / 0은 예외가 아니라 Infinity가 된다는 점도 함정으로 나온다.

시험 포인트 ​

  • 예외 발생: try(발생 지점까지) → catch → finally. 예외 없음: try → finally.
  • finally는 return이 있어도 실행된다.
  • 추상 클래스·인터페이스는 new로 직접 만들 수 없다. 인터페이스는 다중 구현 가능.
  • 0으로 나눔 → ArithmeticException, 배열 범위 밖 → ArrayIndexOutOfBoundsException.

관련 문서