Java 프로그램에서 인터페이스의 메서드를 호출하려면, 먼저 해당 인터페이스를 구현한 클래스의 객체(인스턴스)를 생성해야 합니다. 인터페이스 자체는 직접 인스턴스화할 수 없기 때문에, 구현 클래스 객체를 통해 메서드를 호출하는 것이 기본 원리입니다.
인터페이스 정의 예제
아래 예제는 이름과 직책을 출력하는 세 개의 메서드를 가진 인터페이스입니다. 그중 하나는 default 키워드로 선언된 디폴트 메서드로, 인터페이스 내부에 실행 로직이 포함되어 있습니다. 나머지 두 개의 추상 메서드는 구현부가 없습니다.
public interface InterfaceDemo{
default public void displayNameDefault(String name){
System.out.println("Your name is : " + name);
}
public void displayName(String name);
public void displayNameAndDesignation(String name, String designation);
}인터페이스 구현 클래스 작성
아래 클래스는 implements 키워드를 사용하여 위 인터페이스를 구현합니다. 디폴트 메서드가 아닌 두 개의 추상 메서드에 대해서는 반드시 구현 코드를 제공해야 하며, 아래와 같이 각 메서드의 구현부를 작성했습니다.
public class InterfaceDemoImpl implements InterfaceDemo{
public void displayName(String name) {
System.out.println(name);
}
public void displayNameAndDesignation(String name, String designation) {
System.out.println("Name:" + name + "\n"+ "Designation:" + designation);
}
}인터페이스 메서드 호출하기
이제 구현 클래스의 객체를 생성하고, 다형성(polymorphism)을 활용하여 인터페이스 타입의 참조 변수에 할당한 뒤 각 메서드를 호출할 수 있습니다.
public class CallInterfaceMethod {
public static void main(String args[]){
InterfaceDemo demo = new InterfaceDemoImpl();
demo.displayName("Adithya");
demo.displayNameAndDesignation("Adithya", "Java Developer");
demo.displayNameDefault("Adithya");
}
}위 코드에서 new InterfaceDemoImpl()을 통해 구현 클래스를 인스턴스화하고, 이를 인터페이스 타입 변수 demo에 담았습니다. 이후 인터페이스에 정의된 모든 메서드를 객체를 통해 순차적으로 호출합니다.
실행 결과
Adithya
Name:Adithya
Designation:Java Developer
Your name is : Adithya
핵심 정리
- 인터페이스는 직접 객체를 생성할 수 없으며, 반드시 구현 클래스를 인스턴스화해야 합니다.
- 구현 클래스는
implements키워드로 인터페이스를 상속받고, 추상 메서드를 모두 오버라이딩해야 합니다. - Java 8부터 도입된
default메서드는 인터페이스 내부에 구현 로직을 포함할 수 있어 별도 오버라이딩 없이도 호출 가능합니다. - 인터페이스 타입 참조 변수를 사용하면 다형성을 활용한 유연한 코드 작성이 가능합니다.