BackEnd/Java
Java8. 기본 메소드 (Default Method)와 스태틱 메소드 (Static Method)
hanseom
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
반응형