-
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반응형'BackEnd > Java' 카테고리의 다른 글
Java8. Optional (0) 2022.01.22 Java8. 스트림 (Stream) (0) 2022.01.22 Java8. 메소드 레퍼런스 (Method Reference) (0) 2022.01.20 Java8. 람다 표현식 (Lambda Expressions) (0) 2022.01.20 Java8. 함수형 인터페이스 (Functional Interface) (0) 2022.01.20