본문 바로가기

TIL

2022/02/04 TIL (JAVA8)

The RED : JAVA STREAM 2장, 3장

함수는 동사로, 객체는 명사로 이름을 짓는다.
OOP를 하다 보면 명사로만 추상화를 하게 되는데 동사로 추상화하는 게 좋은 경우가 있다.
명령형 프로그래밍과 선언형 프로그래밍의 일처리는 다르다.

함수형 프로그래밍이 언제 필요한지 몰랐었는데 동사를 추상화할 떄 필요하단 것을 알게 되었다.

1급 시민의 조건

함수/메서드의 매개변수로 전달할 수 있는가
함수/메서드의 반환 값이 될 수 있는가
변수에 담을 수 있는가

객체는 1급 시민의 조건을 갖추고 있으므로 함수를 객체처럼 만든다면 1급 시민이 될 수 있다. JAVA8에서 함수형 프로그래밍을 지원하는 방법이기도 하다.

Funcational Interface

어노테이션이다.
추상메서드를 1개 가지고 있어야 한다. (주로 apply라고 메소드 이름을 짓는다.)

@FunctionalInterface를 사용하면 함수형으로 사용하겠다는 표시이며 Function interface와 BiFunction interface에 사용된다.

JAVA8에서 Function interface와 BiFunction interface를 지원한다.
Function interface는 인자가 1개, BiFunction interfaces는 인자가 2개이다.

기본적으로 지원해주는 interface이며 @FunctionalInterface 사용해서 커스텀하게 만들 수 있다.

@FunctionalInterface
public interface TriFunction<T, U, V, R> {
    R apply(T t, U u, V v);
}

람다 표현식

함수형으로 코드가 주어진다.

Function<Integer, Integer> myAdder = (Integer x) -> {
    return x + 10;
}

매개변수의 타입을 추론할 수 있다면 타입을 뺄 수 있다. (Function을 선언할 때 Integer로 선언했기 때문에 추론할 수 있다.)

Function<Integer, Integer> myAdder = (x) -> {
    return x + 10;
}

매개변수가 하나일 때는 매개변수의 괄호를 제거할 수 있다.

Function<Integer, Integer> myAdder = x -> {
    return x + 10;
}

바로 리턴하는 경우 (문장이 1개인 경우) 중괄호와 return을 생략할 수 있다.

Function<Integer, Integer> myAdder = x ->  x + 10;

모던 자바 인 액션 1장

스트림은 '컬렉션을 처리하면서 발생하는 모호함과 반복적인 코드 문제'와 '멀티코어 활용 어려움'이라는 두 가지 문제를 모두 해결했다.

가독성이 좋지 않은 코드를 변경한 점과 parallelStream()의 활용을 말하는 것 같다.

디폴트 메서드를 이용하면 기존의 코드를 건드리지 않고 설계를 자유롭게 확장할 수 있다.
List를 구현하는 코드가 sort를 구현해야 했지만 JAVA8부터는 구현하지 않아도 된다.

디폴트 메서드의 사용 시기를 알게 되어 좋았다.

'TIL' 카테고리의 다른 글

2022/02/06 TIL  (0) 2022.02.07
2022/02/05 TIL  (0) 2022.02.05
2022/02/03 TIL  (0) 2022.02.04
2022/02/02 TIL  (0) 2022.02.03
2022/02/01 TIL  (0) 2022.02.02