프로그래밍언어/JAVA

[java8] 인터페이스의 디폴트 메서드, 스태틱 메서드

shoney9254 2024. 6. 14. 14:31
반응형

Java 8 인터페이스의 기본 메소드와 스태틱 메소드 가이드

Java 8에서는 인터페이스에 기본 메소드(Default Methods)와 스태틱 메소드(Static Methods)가 추가되었습니다. 이를 통해 인터페이스를 더욱 유연하게 사용하고, 기존 코드를 변경하지 않고도 새로운 기능을 추가할 수 있게 되었습니다. 다음은 이 기능들을 효과적으로 사용하는 방법에 대한 가이드입니다.


1. 기본 메소드 (Default Methods)

기본 메소드란?

기본 메소드는 인터페이스 내에서 메소드 선언뿐만 아니라 구현까지 제공하는 방법입니다. 이를 통해 인터페이스를 구현한 클래스들을 변경하지 않고도 새로운 메소드를 인터페이스에 추가할 수 있습니다.

장점

  • 기존 인터페이스를 구현한 클래스를 깨트리지 않고 새 기능을 추가할 수 있습니다.

주의사항

  • 기본 메소드는 구현체가 모르게 추가된 기능으로 인해 런타임 에러가 발생할 수 있습니다.
  • 반드시 문서화하여 해당 메소드의 구현 명세를 명확히 해야 합니다. (@implSpec 자바독 태그 사용)
  • Object 클래스가 제공하는 기능(equals, hashCode)은 기본 메소드로 제공할 수 없습니다. 이 경우 구현체가 해당 메소드를 재정의해야 합니다.
  • 자신이 수정할 수 있는 인터페이스에만 기본 메소드를 제공해야 합니다.
  • 인터페이스를 상속받는 인터페이스에서 기본 메소드를 추상 메소드로 변경할 수 있습니다.
  • 인터페이스 구현체가 기본 메소드를 재정의할 수도 있습니다.

예제

기본 메소드 정의

public interface MyInterface {

    /**
     * Perform an action.
     *
     * @implSpec
     * This implementation prints "Default action".
     */
    default void performAction() {
        System.out.println("Default action");
    }

    // Abstract method
    void abstractMethod();
}

인터페이스 구현 클래스

public class MyClass implements MyInterface {

    @Override
    public void abstractMethod() {
        System.out.println("Abstract method implementation");
    }

    // 기본 메소드를 재정의할 수도 있습니다.
    @Override
    public void performAction() {
        System.out.println("Custom action");
    }

    public static void main(String[] args) {
        MyClass myClass = new MyClass();
        myClass.performAction(); // Output: Custom action
        myClass.abstractMethod(); // Output: Abstract method implementation
    }
}

 


 

2. 스태틱 메소드 (Static Methods)

스태틱 메소드란?

인터페이스에 타입 관련 헬퍼 또는 유틸리티 메소드를 제공하기 위해 스태틱 메소드를 사용할 수 있습니다. 이를 통해 인터페이스와 관련된 공통 기능을 인터페이스 자체에 정의할 수 있습니다.

예제

스태틱 메소드 정의

public interface UtilityInterface {

    // 스태틱 메소드 정의
    static void utilityMethod() {
        System.out.println("Utility method");
    }

    // Abstract method
    void anotherMethod();
}

스태틱 메소드 사용

public class UtilityClass implements UtilityInterface {

    @Override
    public void anotherMethod() {
        System.out.println("Another method implementation");
    }

    public static void main(String[] args) {
        UtilityClass utilityClass = new UtilityClass();
        utilityClass.anotherMethod(); // Output: Another method implementation

        // 스태틱 메소드는 인터페이스명으로 직접 호출
        UtilityInterface.utilityMethod(); // Output: Utility method
    }
}


이 가이드는 Java 8의 기본 메소드와 스태틱 메소드를 사용하는 방법에 대해 설명합니다. 기본 메소드는 인터페이스에 새로운 기능을 추가할 때 유용하지만, 문서화와 런타임 에러에 주의해야 합니다. 스태틱 메소드는 유틸리티 메소드를 인터페이스에 추가할 때 유용합니다. 이를 통해 인터페이스를 더욱 유연하고 기능적으로 사용할 수 있습니다.

반응형