본문 바로가기
Java

[JAVA] 인터페이스 (Interface)

by 임혁진 2025. 1. 11.
인터페이스는 자바에서 다중 상속을 지원하는 중요한 개념입니다.
인터페이스는 추상 메서드만을 포함 하며, 객체의 공통된 기능을 강제할 수 있도록 합니다.
인터페이스는 일반 클래스와 달리 객체 생성이 불가능 하며, 구현 클래스에서 반드시 메서드를 오버라이딩하여 사용해야 합니다.

인터페이스의 주요 특징

  • 인터페이스는 interface 키워드를 사용하여 선언합니다.
  • 인터페이스는 **상수(public static final)**와 **추상 메서드(public abstract)**로만 구성되어 있습니다.
  • 인터페이스는 다중 상속을 지원하므로 여러 개의 인터페이스를 동시에 구현할 수 있습니다.
  • 인터페이스의 모든 메서드는 public abstract의 특성을 갖습니다. 메서드의 선언부만 있고, 몸체는 없습니다.

예제

인터페이스 선언

public interface Inter1 {
    // 인터페이스에 선언된 메서드
    void method01();  // 추상 메서드
}
public interface Inter2 {
    double PI = 3.14;  // 인터페이스의 상수 선언
    void method02();   // 추상 메서드
}

클래스가 인터페이스를 구현

public class Basic implements Inter1, Inter2 {
    
    // Inter1의 메서드를 오버라이딩
    @Override
    public void method01() {
        System.out.println("오버라이드 된 메서드 1번");
    }
    
    // Inter2의 메서드를 오버라이딩
    @Override
    public void method02() {
        System.out.println("오버라이드 된 메서드 2번");
    }
    
    // 인터페이스에서 선언된 static 메서드 호출
    public void method03() {
        System.out.println("basic의 메서드 3번");
    }
}

Main 클래스

public class MainClass {
    public static void main(String[] args) {
        // 인터페이스 타입으로 객체 생성 (다형성 활용)
        Basic b = new Basic();
        
        b.method01();  // 오버라이드된 메서드 호출
        b.method02();  // 오버라이드된 메서드 호출
        b.method03();  // 기본 메서드 호출
        
        System.out.println("------------------------------");
        
        // 인터페이스의 부모 타입으로 변환
        Inter1 i1 = b;
        i1.method01();  // 오버라이드된 메서드 호출
        
        Inter2 i2 = b;
        System.out.println("PI: " + i2.PI);  // 인터페이스의 상수 사용
        i2.method02();  // 오버라이드된 메서드 호출
    }
}

출력 결과

오버라이드 된 메서드 1번
오버라이드 된 메서드 2번
basic의 메서드 3번
------------------------------
오버라이드 된 메서드 1번
PI: 3.14
오버라이드 된 메서드 2번

인터페이스의 특징

  • 인터페이스는 추상 메서드만 포함되며, 객체 생성이 불가능합니다.
  • implements 키워드를 사용해 클래스가 인터페이스를 구현합니다.
  • 다중 상속을 지원하여 여러 개의 인터페이스를 동시에 구현할 수 있습니다.
  • 인터페이스에 선언된 모든 메서드는 public abstract이며, 구현 클래스에서 반드시 오버라이딩해야 합니다.

다중 인터페이스 구현 예제

public interface InterA {
    void methodA();
}

public interface InterB {
    void methodB();
}

public class MultiInterfaceExample implements InterA, InterB {

    @Override
    public void methodA() {
        System.out.println("InterA의 메서드 A 구현");
    }

    @Override
    public void methodB() {
        System.out.println("InterB의 메서드 B 구현");
    }
}

Main 클래스

public class MainClass {
    public static void main(String[] args) {
        MultiInterfaceExample example = new MultiInterfaceExample();
        example.methodA();  // InterA 메서드 호출
        example.methodB();  // InterB 메서드 호출
    }
}

출력 결과

InterA의 메서드 A 구현
InterB의 메서드 B 구현

인터페이스의 활용

  • 인터페이스는 프로그램의 확장성과 유지보수성을 높이며, 다형성을 통해 유연한 코드 작성이 가능합니다.
  • 여러 클래스들이 동일한 기능을 공유할 때, 인터페이스를 사용하여 공통된 메서드를 강제할 수 있습니다.