인터페이스의 변화
인터페이스 기본 메소드와 스태틱 메소드
기본 메소드(Dafault Methods)
-
인터페이스에 메소드 선언이 아니라 구현체를 제공하는 방법
-
해당 인터페이스를 구현한 클래스를 깨뜨리지 않고 새 기능을 추가할 수 있음
-
기본 메소드는 구현체가 모르게 추가된 기능으로 그만큼 리스크가 있음
-
컴파일 에러는 아니지만 구현체에 따라 런타임 에러가 발생할 수 있음
-
반드시 문서화 해야함(@impleSpec 태그 사용)
ex)
public interface Foo{ void printName(); /** * @impleSpec * 이 구현체는 getName()으로 가져온 문자열을 대문자로 바꿔 출력한다 */ default void printNameUpperCase(){ System.out.println(getName().toUpperCase()); } }
-
-
Object가 제공하는 기능(equals, hasCode)은 기본 메소드로 제공할 수 없음
- 구현체가 재정의해야 함
-
본인이 수정할 수 있는 인터페이스에만 기본 메소드를 제공할 수 있음
-
인터페이스를 상속받는 인터페이스에서 다시 추상 메소드로 변경할 수 있음
-
인터페이스 구현체가 재정의 할 수도 있음
스태틱 메소드
- 해당 타입 관련 또는 유틸리티 메소드를 제공할 때 인터페이스에 스태틱 메소드를 제공할 수 있음
자바 8 API의 기본 메소드와 스태틱 메소드
자바 8에서 추가한 기본 메소드로 인한 API 변화
Iterable의 기본 메소드
-
forEach()
-
spliterator() => 병렬 처리에 유용(나눠서 처리할 수 있기 때문)
-
Spliterator<String> spliterator = name.spliterator(); Spliterator<String> spliterator1 = spliterator.trySplit(); //spliterator가 반으로 잘리고, 나머지 반이 해당 변수에 들어감 while(spliterator.tryAdvance(System.out::println)); while(spliterator1.tryAdvance(System.out::println));
-
Collection의 기본 메소드
-
stream() / parallerlStream()
-
removeIf(Predicate)
-
name.removeIf(s->s.startWith("k")); name.forEach(System.out::println); //k포함하는 값 제거
-
-
spliterator()
Comparator의 기본 메소드 및 스태틱 메소드
-
reversed()
-
thenComparing() //다른 조건으로 정렬
-
static reverseOrder() / naturalOrder()
-
static nullsFirst() / nullsLast()
-
static comparing()
-
Comparator<String> compareToIgnoreCase= String::compareToIgnoreCase; name.sort(compareToIgnoreCase.reversed()); //역순 name.forEach(System.out::println);
참고
https://www.inflearn.com/course/the-java-java8
Author And Source
이 문제에 관하여(인터페이스의 변화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@alwayslee_12/인터페이스의-변화저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)