JAVA의 인터페이스

 

 

인터페이스(InterFace)

Java 인터페이스는 따라야 할 클래스에 대한 계약을 정의하는 방법을 제공하는 객체 지향 프로그래밍의 중요한 개념입니다. 인터페이스를 사용하면 클래스가 구현해야 하는 일련의 메서드를 지정할 수 있으므로 여러 클래스가 준수할 수 있는 공통 인터페이스를 설정할 수 있습니다.

다음은 Java 인터페이스와 관련된 주요 기능 및 개념입니다.

 

 

인터페이스 선언

인터페이스는 interface 키워드와 인터페이스 이름을 사용하여 선언됩니다. 구현 클래스가 제공해야 하는 메서드 시그니처 목록을 정의합니다.

interface Drawable {
    void draw();
    double calculateArea();
}

 

인터페이스 구현

인터페이스를 사용하려면 클래스에서 implements 키워드를 사용하여 인터페이스를 구현해야 합니다. 클래스는 인터페이스에 선언된 모든 메서드에 대한 구체적인 구현을 제공해야 합니다.

class Circle implements Drawable {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    public void draw() {
        // Implementation of the draw method
    }

    public double calculateArea() {
        // Implementation of the calculateArea method
    }
}

 

멀티 인터페이스

클래스는 쉼표로 구분하여 여러 인터페이스를 구현할 수 있습니다. 이를 통해 클래스는 다른 인터페이스의 메서드 구현을 상속하고 제공할 수 있습니다.

class Square implements Drawable, Resizable {
    // Implement methods from Drawable and Resizable interfaces
}

 

Default 메서드

Java 8부터 인터페이스는 메서드에 대한 기본 구현을 제공하는 기본 메서드를 포함할 수 있습니다. 이러한 메서드는 클래스를 구현하여 재정의할 수 있지만 클래스가 자체를 제공하지 않을 때 기본 구현을 제공합니다.

interface Drawable {
    void draw();

    default void printDescription() {
        System.out.println("This is a drawable object.");
    }
}

 

정적 메서드(Static Methods)

Java 8은 또한 인터페이스에 정적 메서드를 도입했습니다. 이러한 메서드는 Static 키워드를 사용하여 정의되며 인터페이스 자체에서 직접 호출할 수 있습니다.

interface Logger {
    static void log(String message) {
        System.out.println("Log: " + message);
    }
}

 

상수 필드

인터페이스는 또한 암시적으로 public, static 및 final인 상수 필드를 포함할 수 있습니다. 이러한 필드는 일반적으로 구현 클래스에서 사용할 수 있는 상수를 정의하는 데 사용됩니다.

interface Constants {
    int MAX_VALUE = 100;
    String DEFAULT_NAME = "Unknown";
}

 

기능 인터페이스(Functional Interfaces)

기능적 인터페이스는 정확히 하나의 추상 메서드가 있는 인터페이스입니다. 기능적 인터페이스는 종종 람다(lambda)식 및 메서드 참조와 함께 사용됩니다.

@FunctionalInterface
interface Calculator {
    int calculate(int a, int b);
}

 

 

 

요약하면 Java 인터페이스는 다중 상속을 달성하고 계약을 정의하며 유연하고 재사용 가능한 코드를 생성하는 방법을 제공합니다. 그것들은 다형성을 달성하는 데 중심적인 역할을 하여 서로 다른 클래스가 공통된 일련의 동작을 고수할 수 있도록 합니다.