본 게시물은 인프런 백기선님 강의 "더 자바, java8"을 학습하고 개인적으로 정리한 내용입니다.
https://www.inflearn.com/course/the-java-java8#
목차
1. 인터페이스 기본 메소드와 스태틱 메소드
2. 자바8 API의 기본 메소드와 스태틱 메소드
1. 인터페이스 기본 메소드와 스태틱 메소드
기본 메서드의 탄생과정
인터페이스에 새로운 추상 메서드를 추가하면 인터페이스를 구현한 모든 클래스에 컴파일에러가 난다. 그래서 공통적으로 가져야할 기능을 default method로 추가할 수 있다.
예를 들면 java가 제공하는 collection에도 removeIf()라는 default method를 제공한다.
removeIf(Predicate<? super E> filter)
주의해야할 점
모든 인스턴스에 제공되지만 항상 제대로 동작한다는 보장이 없다. 그래서 @implSpec을 사용해서 어떤일을 하는지 명확하게 알려줘서 인터페이스를 사용하는 클래스들이 default method를 명확하게 이해하고 사용할 수 있게 해야한다.
구현하는 쪽에서 override로 재정의를 할 수 있지만, 제약사항으로 object에서 제공하는 method인 equals, hashcode, toString 등을 default method로 만들 수 없다. default String toString() {} 과 같은 코드는 컴파일에러가 발생한다.
하지만 equals, toString 등을 추상메서드로 선언하는 것은 괜찮다. 인터페이스를 구현한 클래스의 toString이 다른 클래스와 다른 색다른 특징이 있을 때 추상메서드로 만들고 문서화하는 경우도 있다.
default method를 사용하고 싶지 않을 때
만약에 어떤 인터페이스가 다른 인터페이스를 상속받는데, 다른 인터페이스의 default method를 사용하고 싶지 않으면 같은 이름으로 새로운 추상메서드를 선언하면 된다.
default method 충돌
두 인터페이스를 구현했는데, 두 인터페이스에 같은 이름의 default method가 있다고 가정하자. 충돌이 일어나서 컴파일에러가 발생할 수 있는데, 그러한 경우에는 둘 중에 어떤 것을 써야할 지 모르기 때문에 직접 오버라이딩을 한다.
2. 자바8 API의 기본 메서드와 스태틱 메서드
forEach(Consumer<? super T> action)
forEach를 사용하면 반복문을 손쉽게 순회할 수 있다.
consumer : 무언가를 받아 return 없이 처리하는 인터페이스
name.forEach(System.out::println) : list의 값을 전달받아 아무것도 return하지 않는다.
public class App {
public static void main(String[] args) {
List<String> name = new ArrayList<>();
name.add("keesun");
name.add("whiteship");
name.add("toby");
name.add("foo");
name.forEach(System.out::println);
}
}
spliterator()
stream()
모든 컬렉션 프레임워크를 스트림으로 변환해서 함수형 프로그래밍할 수 있다. 다음 포스팅에 자세히
removeIf(Predicate<? super E> filter)
predicate을 넘겨주면 되는데, 다음과 같이 사용할 수 있다.
public class App {
public static void main(String[] args) {
List<String> name = new ArrayList<>();
name.add("keesun");
name.add("whiteship");
name.add("toby");
name.add("foo");
name.removeIf(s -> s.startsWith("k"));
name.forEach(System.out::println);
}
}
whiteship, tovy, foo를 출력한다.
더 학습할 내용
1. Comparator의 기본 메서드 및 스태틱 메서드
2. thenComparing()
3. nullsFirst(), nullsLast()
4. comparing
'자바 > 백기선 더 자바, java8' 카테고리의 다른 글
[더 자바, java8] Optional 소개 (0) | 2022.11.20 |
---|---|
[더 자바, java8] Stream (0) | 2022.11.15 |
[더 자바, java8] 함수형 인터페이스와 람다 (0) | 2022.11.02 |