JAVA 입문 - 인터페이스
지난 글: [프로그래밍 언어/JAVA] - JAVA 입문 - final 예약어
구현 코드가 없는 인터페이스
인터페이스(Interface)는 클래스 혹은 프로그램이 제공하는 기능을 명시적으로 선언하는 역할을 한다. 인터페이스는 추상 메서드와 상수로만 이루어져 있다. 구현된 코드가 없기 때문에 당연히 인터페이스로 인스턴스를 생성할 수도 없다. 허면 인터페이스는 어떻게 사용하는 걸까?
인터페이스 만들기
인터페이스를 사용해 간단한 계산기 프로그램을 만들어보자.
이클립스에서 인터페이스를 만들려면 패키지에 마우스 우클릭을 하고 New - Interface를 클릭한다. 그리고 인터페이스 내부에 다음 코드를 작성한다.

인터페이스에서 선언한 변수는 컴파일 과정에서 상수로 변환된다. 또, 인터페이스에서 선언한 메서드는 컴파일 과정에서 추상 메서드로 변환된다. 위 인터페이스는 계산기를 만들기 위해 선언한 코드이고 Calc 인터페이스는 원주율을 뜻하는 PI 변수와 오류가 났을 때 사용할 ERROR 변수, 사칙 연산 수행을 위한 add( ), substract( ), times( ), divide( ) 추상 메서드가 있다. 이들 메서드는 public abstract예약어를 직접 명시하지 않아도 된다. 변수도 마찬가지로 public static final 예약어를 사용하지 않아도 된다.
클래스에서 인터페이스 구현하기
위처럼 선언한 인터페이스를 클래스가 사용하는 것을 '클래스에서 인터페이스는 구현한다(implements)'라고 표현한다. 이전 클래스 간 상속에서 하위 클래스 이름 뒤에 사용하는 extends 처럼 인터페이스에서는 인터페이스에 선언한 기능을 클래스가 구현하다는의미로 implements 예약어를 사용한다.

만약 구현해야하는 추상 메서드 중 하나라도 구현하지 않으면 해당 클래스는 추상 클래스가 된다. 11행에서는 숫자를 0으로 나눌 수 없기에 나누는 수num2가 0이 아닐 때만 나누기 연산을 진행하고 num2가 0이라면 Calc 인터페이스에서 상수로 선언해 둔 ERROR 메시지를 반환한다.
이제 테스트를 해보자.


인터페이스 구현과 형 변환
이전 글에서 상속 관계에서 하위 클래스는 상위 클래스 자료형으로 묵시적 형 변환할 수 있다고 배웠었다. 인터페이스도 마찬가지다. Calculator 클래스는 Calc 인터페이스를 구현하였으므로 별다른 조치 없이 Calc형으로 선언한 변수에 대입할 수 있다.
참고 서적: 자바 프로그래밍 입문 - 박은종