Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바 인터페이스 완벽 가이드: 개념부터 선언 방법까지

인터페이스(Interface)는 자바에서 참조 타입(reference type)의 하나로, 클래스와 유사한 개념입니다. 인터페이스는 추상 메서드들의 집합이며, 클래스가 인터페이스를 구현(implement)하면 해당 인터페이스의 추상 메서드들을 상속받게 됩니다.

인터페이스의 구성 요소

인터페이스에는 추상 메서드뿐만 아니라 상수(constants), 디폴트 메서드(default methods), 정적 메서드(static methods), 중첩 타입(nested types)도 포함될 수 있습니다. 다만 메서드 본문(body)은 오직 디폴트 메서드와 정적 메서드에만 존재합니다.

인터페이스를 작성하는 방식은 클래스를 작성하는 것과 비슷하지만, 목적에는 차이가 있습니다. 클래스는 객체의 속성과 동작을 기술하는 반면, 인터페이스는 클래스가 반드시 구현해야 할 동작만을 담고 있습니다.

💡 핵심 규칙: 인터페이스를 구현하는 클래스가 추상 클래스가 아닌 이상, 인터페이스에 선언된 모든 메서드는 반드시 해당 클래스 내에서 구현(정의)되어야 합니다.

클래스와 인터페이스의 공통점

인터페이스는 다음과 같은 점에서 클래스와 유사합니다.

  • 인터페이스는 원하는 만큼 여러 개의 메서드를 포함할 수 있습니다.
  • 인터페이스는 .java 확장자를 가진 파일로 작성되며, 파일 이름은 인터페이스 이름과 일치해야 합니다.
  • 인터페이스의 바이트코드(bytecode)는 .class 파일 형태로 생성됩니다.
  • 인터페이스는 패키지에 포함될 수 있으며, 해당 바이트코드 파일은 패키지 이름과 일치하는 디렉터리 구조 안에 위치해야 합니다.

클래스와 인터페이스의 차이점

반면, 인터페이스는 클래스와 다음과 같은 중요한 차이점을 가집니다.

  • 인터페이스는 객체화(instantiate)할 수 없습니다.
  • 인터페이스에는 생성자(constructor)가 없습니다.
  • 인터페이스의 모든 메서드는 추상(abstract) 메서드입니다.
  • 인터페이스는 인스턴스 필드(instance field)를 가질 수 없으며, 선언 가능한 필드는 반드시 static이면서 final이어야 합니다.
  • 인터페이스는 클래스에 의해 상속(extends)되는 것이 아니라 구현(implements)됩니다.
  • 인터페이스는 여러 개의 인터페이스를 동시에 상속(확장)할 수 있습니다. 이는 자바의 다중 상속을 지원하는 방식이기도 합니다.

인터페이스 선언하기

인터페이스를 선언하려면 interface 키워드를 사용합니다. 아래는 인터페이스를 선언하는 간단한 예제입니다.

예제 코드

/* File name : NameOfInterface.java */
import java.lang.*;
// 필요한 만큼 import 문 작성 가능

public interface NameOfInterface {
    // final, static으로 선언된 필드들 //
    // 추상 메서드 선언부 작성
}

위 예제처럼 인터페이스는 별도의 .java 파일로 저장되어야 하며, 파일명은 반드시 public 인터페이스의 이름과 동일해야 합니다. 인터페이스를 활용하면 코드의 결합도를 낮추고 유연한 설계를 할 수 있어, 실무 개발에서 매우 널리 사용되는 핵심 개념입니다.