인터페이스의 변화

이승민·2022년 10월 18일

JAVA8

목록 보기
11/18

인터페이스 기본 메소드와 스태틱 메소드

기본 메소드(Default Methods)

  • 인터페이스에 메소드 선언이 아니라 구현체를 제공하는 방법
  • 해당 인터페이스를 구현한 클래스를 깨트리지 않고 새 기능을 추가할 수 있다
  • 기본 메소드는 구현체가 모르게 추가된 기능으로 그만큼 리스크가 있다
    • 컴파일 에러는 아니지만 구현체에 따라 런타임 에러가 발생할 수 있다.
    • 반드시 문서화 할것 (@impleSpec 자바독 태그 사용)
  • Object가 제공하는 기능(equals, hasCode)는 기본 메소드로 제공할 수 없다.
    • 구현체가 재정의해야한다.
  • 본인이 수정할수 있는 인터페이스에만 기본 메소드를 제공할 수 있다.
  • 인터페이스를 상속받는 인터페이스에서 다시 추상 메소드로 변경할 수 있다.
  • 인터페이스 구현체가 재정의 할 수도 있다.
  • 충돌하는 default 메소드가 있는 경우는 직접 override 해야한다.
public interface Foo {

    void printName();

	 /**
     * @implSpec 
     * 이 구현체는 getName()으로 가져온 문자열을 대문자로 바꿔 출력한다.
     */
    default void printNameUpperCase() {
        System.out.println(getName().toUpperCase());
    }

    String getName();
}

스태틱 메소드 (Static Methods)

  • 해당 타입 관련 헬퍼 또는 유틸리티 메소드를 제공할 때 인터페이스에 스태틱 메소드를 제공할 수 있다.

자바 8 API의 기본 메소드와 스태틱 메소드드

자바 8에서 추가한 기본 메소드로 인한 API 변화

Iterable의 기본 메소드

  • forEach()
List<String> name = new ArrayList<>();
        name.add("keesun");
        name.add("whiteship");
        name.add("toby");
        name.add("foo");

        name.forEach(System.out::println);
  • spliterator()
 List<String> name = new ArrayList<>();
        name.add("keesun");
        name.add("whiteship");
        name.add("toby");
        name.add("foo");

        Spliterator<String> spliterator = name.spliterator();
        Spliterator<String> spliterator1 = spliterator.trySplit(); //반으로 쪼갠다.
        while (spliterator.tryAdvance(System.out::println)); // 순회
        System.out.println("=========");
        while (spliterator1.tryAdvance(System.out::println));

Collection의 기본 메소드

  • stream() / parallelStream()
  • removeIf(Predicate)
  • spliterator()

Comparator의 기본 메소드 및 스태틱 메소드

  • reversed() : 역순 정렬
  • thenComparing()
  • static reverseOrder() / naturalOrder()
  • static nullsFirst() / nullsLast()
  • static comparing()
profile
💻 끊임없이 성장하는 백엔드 개발자 💻

0개의 댓글