인터페이스의 변화

이연중·2021년 1월 29일
0

JAVA

목록 보기
9/20

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

기본 메소드(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

profile
Always's Archives

0개의 댓글