Java 8 API의 default/static method 정리

Bruce Han·2023년 2월 11일
0

Java8-정리

목록 보기
6/20
post-thumbnail

이 포스팅의 코드 및 정보들은 강의를 들으며 정리한 내용을 토대로 작성한 것입니다.

Java 8 이후로 추가된 default method로 인해 API에도 변화가 생겼다.
그 변화된 API 중 자주 사용되는 API에 대해서 알아보겠다.

default method in Iterable

forEach()

api1

List에 운동 목록을 추가시켜놓고 출력하는 예제로 forEach()를 살펴보겠다.

api2

sports에 forEach()를 쓰려고 하면 (Functional interface의) Consumer타입의 인자를 받으려고 하는 걸 볼 수 있다.
각각의 String이 차례대로 들어올 거고, return하는 값이 없는 것이 Consumer이다.

api3

매개변수로 받는 s를 출력한다고 하면 괄호 안에 System.out.print()로 s를 넣고 출력할 수 있지만

sports.forEach(System.out::println);

이렇게 줄일 수도 있다.

api4

단순 for문을 활용한 for each문보다 보기 훨씬 편해졌다.

spliterator()

Spliterator<String> spliterator = sports.spliterator();

spliterator()는 쪼개는 기능(split)을 가지고 있는 iterator라고 보면 된다.

api5

위의 iterator와 마찬가지로 순환하는 기능을 사용할 수 있는데, iterator의 hasNext를 spliterator에서는 tryAdvance()를 사용해서 Consumer 타입을 받는다.

api6

사실 이거는 split 기능을 쓰진 않았고, iterator 기능만 사용했다.

spliterator에 있는 trySplit()을 이용하면, sports에 있는 내용물의 반이 잘린다. 이를 다른 이름의 Spliterator 함수 인터페이스에 담아서 출력을 하면 다음과 같이 뒤에 잘린 것이 먼저 출력되고, 그 다음에는 앞에 잘린 것들이 출력되는 것을 확인할 수 있다.

api7

순서에는 상관없이 parallel하게 처리할 때 유용하게 쓰일 수 있다.

default method in Collection

stream()

sports.stream();

이 stream()이라는 것은

api8

Collection에 있으며, Collection의 하위 인터페이스들은 다 이 stream()을 가지고 있다.(default method의 기본 규칙) 또한, 이 stream()을 보면 spliterator()가 있는 걸 확인할 수 있다.
stream()은 element들을 stream으로 만들어서 functional하게 처리할 수 있는 것이다.

api9
stream()을 활용해서 sports 원소들을 모두 대문자로 바꾼 후, 그중 B로 시작하는 것만 가져와서 개수를 세는 식을 만들었다. B로 시작하는 것은 Boxing 하나이므로 결과적으로 1이 출력되는 것을 확인할 수 있다.

api10

count() 말고 collect()로 가져와서 다양하게 활용할 수 있다.

removeIf()

api11

반대로 b로 시작하는 것을 removeIf()를 통해 거르고(제외하고) 그 나머지를 가져올 수 있다.

default method in Comparator

Comparator는 주로 정렬할 때 자주 쓰이는 인터페이스이다.

api12

List의 sort()로 정렬을 하려고 할 때, sort()의 파라미터로 Comparator 타입을 받도록 되어있다. 이 Comparator는 함수형 인터페이스이다.

api13

String::compareToIgnoreCase로 오름차순으로 정렬할 수도 있다.
만약, 이를 역순으로(내림차순) 정렬하고 싶다면

reversed()

api14

String::compareToIgnoreCase를 따로 꺼내고, 꺼낸 함수형 인터페이스에 reversed()를 추가하면 역순으로 정렬된다.

api15

thenComparing()

추가적으로 다른 조건으로 비교하고 싶다, 또 다른 정렬 조건을 더하고 싶을 때 쓸 수 있다.

api16

static method in Comparator

reverseOrder() / naturalOrder()

nullsFirst() / nullsLast()

nullsFirst()는 null 값이면 우선수위가 더 높다고 정렬할 때 더 앞쪽으로 밀어준다.

nullsLast()는 그의 반대로 뒤쪽으로 밀어준다.

comparing()

정리

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

  • Iterable의 기본 메서드

    • forEach()
    • spliterator()
  • Collection의 기본 메서드

    • stream() / parallelStream()
    • removeIf(Predicate)
    • spliterator()
  • Comparator의 기본 메서드 및 스태틱 메서드

    • reversed()
    • thenComparing()
    • static reverseOrder() / naturalOrder()
    • static nullsFirst() / nullsLast()
    • static comparing()

Reference

profile
만 가지 발차기를 한 번씩 연습하는 사람은 두렵지 않다. 내가 두려워 하는 사람은 한 가지 발차기를 만 번씩 연습하는 사람이다. - Bruce Lee

0개의 댓글