ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java8. 기본 메소드 (Default Method)와 스태틱 메소드 (Static Method)
    BackEnd/Java 2022. 1. 22. 04:10
    반응형

    기본 메소드 (Default Method)

      기본 메소드란 인터페이스에 메소드 선언이 아니라 구현체를 제공하는 방법으로 해당 인터페이스를 구현한 클래스를 깨트리지 않고 새 기능을 추가할 수 있습니다. 단, Object가 제공하는 기능 (equals, hashCode)는 기본 메소드로 제공할 수 없습니다.

     

      아래 Default 인터페이스와 Default 인터페이스를 구현한 DefaultClass가 있습니다.

    public class Application {
    
      public static void main(String[] args) {
        Default defaultClass = new DefaultClass();
        defaultClass.printJava();
      }
    
    }
    public interface Default {
      void printJava();
    }
    public class DefaultClass implements Default{
    
      @Override
      public void printJava() {
        System.out.println("Hello, Java!");
      }
    
    }

     

      Default 인터페이스에 새로운 메소드 정의 시 Default 인터페이스를 구현한 모든 클래스에 해당 메소드를 재정의 해주어야 합니다. 이러한 경우, Default 메서드를 사용할 수 있습니다.

    public class Application {
    
      public static void main(String[] args) {
        Default defaultClass = new DefaultClass();
        defaultClass.printJava(); // [결과]: Hello, Java!
        defaultClass.printDefaultMethod(); // [결과]: Default Method!
      }
    
    }
    public interface Default {
      void printJava();
    
      // void printDefaultMethod() 추가 시 DefaultClass.java에서 해당 메소드를 재정의 해주어야 합니다.
      // 메소드 선언이 아니라 구현체입니다.
      default void printDefaultMethod() {
        System.out.println("Default Method!");
      };
    }
    public class DefaultClass implements Default{
    
      @Override
      public void printJava() {
        System.out.println("Hello, Java!");
      }
    
    }

     

      인터페이스를 상속받는 인터페이스에서 다시 추상 메소드로 변경할 수 있으며, 인터페이스 구현체가 재정의 할 수도 있습니다.

    public class Application {
    
      public static void main(String[] args) {
        Default defaultClass = new DefaultClass();
        defaultClass.printJava(); // [결과]: Hello, Java!
        defaultClass.printDefaultMethod(); // [결과]: Overriding!
      }
    
    }
    public interface Default {
      void printJava();
    
      // void printDefaultMethod() 추가 시 DefaultClass.java에서 해당 메서드를 재정의 해주어야 합니다.
      // 메서드 선언이 아니라 구현체입니다.
      default void printDefaultMethod() {
        System.out.println("Default Method!");
      };
    }
    public class DefaultClass implements Default{
    
      @Override
      public void printJava() {
        System.out.println("Hello, Java!");
      }
    
      // Default 인터페이스에 있는 printDefaultMethod 메서드를 재정의합니다.
      @Override
      public void printDefaultMethod() {
        System.out.println("Overriding!");
      }
    
    }

     

    스태틱 메소드 (Static Method)

      유틸리티 메소드를 제공할 때 인터페이스에 스태틱 메소드를 제공할 수 있습니다.

    public class Application {
    
      public static void main(String[] args) {
        Default defaultClass = new DefaultClass();
        defaultClass.printJava(); // [결과]: Hello, Java!
        defaultClass.printDefaultMethod(); // [결과]: Overriding!
    
        Default.printStaticMethod(); // [결과]: Static Method!
      }
    
    }
    public interface Default {
      void printJava();
    
      // void printDefaultMethod() 추가 시 DefaultClass.java에서 해당 메서드를 재정의 해주어야 합니다.
      // 메서드 선언이 아니라 구현체입니다.
      default void printDefaultMethod() {
        System.out.println("Default Method!");
      }
    
      // Static Method
      static void printStaticMethod() {
        System.out.println("Static Method!");
      }
    }

     

    Java8 API의 기본 메소드와 스태틱 메소드

    • Iterable의 기본 메소드: forEach() / spliterator()
    • Collection의 기본 메소드: stream() / parallelStream() / removeIf(Predicate) / spliterator()
    • Comparator의 기본 메소드 및 스태틱 메소드: reversed() / thenComparing() / static reverseOrder() / naturalOrder() / static nullsFirst() / nullsLast() / static comparing()

     

    [참고]

    https://docs.oracle.com/javase/8/docs/api/java/util/Spliterator.html
    https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html
    https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html
    https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html

    반응형

    댓글

Designed by Tistory.