What I Learned
크롱의 수업
함수형 프로그래밍
- 함수형 프로그래밍, 객체지향 프로그래밍 모두 컴퓨터를 위한 것은 아니다. 모두 코드를 잘 읽을 수 있게 하고 유지보수를 쉽게 하기 위해 생겨난 패러다임이다. 그러니 너무 한쪽으로 치우치지 않고(패러다임 자체를 목적으로 하지 않고) 각각의 특징을 살려 프로그래밍 할 수 있도록 한다.
- 외부에 값을 참조해도 영향을 주지 않는 함수를 '순수하다'고 한다.
- 순수함수는 동일한 인풋을 넣으면 동일한 아웃풋이 나와야 하고 결과값이 예상이 되어야 한다.
- 함수가 순수해야 함수합성이 가능해진다.
- 큰 아키텍처에서는 객체지향이 더 활용적일 수 있다.
- 함수역할의 정의를 잘 해야 한다. 연습이 많이 필요하다.
FP v. OOP
- FP: Declarative. 전역상태를 사용하지 않고 함수가 핵심이 된다.
- OOP: Imperative. 전역상태를 인정하고 이를 변경한다. 핵심은 객체에 있다.
자바의 정석 / 유투브
유투브 비디오 Java Functional Programming by Amigoscode 를 참고했다.
Method Reference
메소드 참조는 람다식을 간략하게 작성하는 방식이다.
Integer method(String s) { // 메소드를 길게 푼 형식
return Integer.parseInt(s);
}
int result = Integer.parseInt(s); // 위의 method를 간략하게 표현해서 result 변수에 넣음
Function<String, Integer> method = s -> Integer.parseInt(s); // 람다식
람다식에서 (x) -> ClassName.method(x) 로 표현되는 것을 메소드 참조로는 ClassName::method로 표현된다. 인풋이나 아웃풋의 변수타입은 Function 인터페이스의 지네릭 타입으로부터 알 수 있어서 생략한다.
Function<String, Integer> method = Integer::parseInt; // 메소드 참조
- Instance Method Reference
스태틱 메소드 참조와 동일하게 클래스이름::메소드 형식으로 작성한다