인터페이스 기본 메소드와 스태틱 메소드
public interface Foo {
void printName(); // abstract 가 생략된 것이다.
// 기본 메소드
default void printNameUpperCase() {
System.out.println(getName().toUpperCase());
}
// static 메소드
static void printAnything(){
System.out.println("Foo");
}
}
- 기본 메소드
- 어떤 인터페이스가 있다고 했을때, 해당 인터페이스를 구현하는 인스턴스들에
공통적으로 제공해주고 싶은 기능
이 있다면?
- 모든 인스턴스에 그 기능을 추가해야한다. -> 번거롭다 -> 그래서 등장하게 된 것이 인터페이스 기본 메소드(Default Methods)다.
- 인터페이스에 메소드 선언이 아니라 구현체를 제공하는 방법이다.
- 해당 인터페이스를 구현한 클래스를 깨트리지 않고 새 기능을 추가할 수 있다.
- 기본 메소드는 구현체가 모르게 추가된 기능으로 그만큼
리스크
가 있다.
- 컴파일 에러는 아니지만 구현체에 따라 런타임 에러가 발생할 수 있다.
반드시 문서화 할 것
. (@implSpec 자바독 태그 사용)
Object 가 제공하는 기능
(equals, hasCode)는 기본 메소드로 제공할 수 없다.
- 본인이 수정할 수 있는 인터페이스에만 기본 메소드를 제공할 수 있다.
- 인터페이스를 상속받는 인터페이스에서 다시
추상 메소드로 변경할 수 있다.
- 인터페이스 구현체가
재정의
할 수도 있다.
- 스태틱 메소드
- 해당 타입 관련
헬퍼
또는 유틸리티 메소드를 제공할 때 인터페이스에 스태틱 메소드
를 제공할 수 있다.
자바 8 API의 기본 메소드와 스태틱 메소드
Iterable의 기본 메소드
- forEach()
- spliterator()
- ex>
List<String> numbers = new ArrayList();
numbers.add("one");
numbers.add("two");
numbers.add("thredd");
numbers.add("four");
//forEach
numbers.forEach(s -> System.out.println(s));
//spliterator
Spliterator<String> spliterator = numbers.spliterator();
Spliterator<String> spliterator2 = spliterator.trySplit() // 절반으로 쪼개진다.
while(spliterator.tryAdvance(System.out::println));
while(spliterator2.tryAdvance(System.out::println));
Collection의 기본 메소드
- stream() / parallelStream()
- removeIf(Predicate)
- spliterator()
- ex>
List<String> numbers = new ArrayList();
numbers.add("one");
numbers.add("two");
numbers.add("thredd");
numbers.add("four");
//stream
numbers.stream()
.map(String::toUpperCase)
.filter(s -> s.startsWith("t")) // t로 시작하는 것만 필터링한다.
.count();
//removeIf
numbers.removeIf(s -> s.startsWith("t")); // t로 시작하는 것들은 삭제한다.
Comparator의 기본 메소드 및 스태틱 메소드
- reversed()
- thenComparing()
- static reverseOrder() / naturalOrder()
- static nullsFirst() / nullsLast()
- static comparing()
- ex>
Comparator<String> compareToIgnoreCase = String::compareToIgnoreCase;
numbers.sort(compareToIgnoreCase.reversed().thenComparing())
REFERENCES