함수형 프로그래밍
1. 객체 지향 프로그래밍의 핵심 아이디어
- 프로그램을 객체들의 협력과 상호작용으로 구현
- 객체들을 정의하기 위해서 추상화 개념을 사용
- 재사용성이 높음
- 유지 보수 및 확장하기 용이함
- 신뢰성 있는 코드 작성으로 쉬움
2. 함수형 프로그래밍의 핵심 아이디어
- 수학의 함수와 같이 특정 데이터에 의존하지 않고, 관련 없는 데이터를 변경하지 않으며, 결과값이 오직 입력값에만 영향을 받는 함수를 순수 함수라고 한다.
- 순수한 함수의 모음으로 구현
- 검증 및 성능 최적화가 쉬움
- 동시성 문제 해결
ex)
f(x, y) = x + 2xy
public int someMethod(int x, int y) {
return x + 2y;
}
class notFunc {
private int y = 0;
private int result;
public int anotherMethod(int x) {
return x + this.y * 2;
}
public int otherMethod(int x, int y) {
int result = x + 2 * y;
this.result = result;
return result;
}
}
3. Java 8에서 새로운 추가된 개념들
- 함수형 프로그래밍 1 : 함수를 일급 값으로
- 지금까지 자바에서 "조작할 수 있는"값이란
a. 기본값(기본타입)
b. 객체
- 위의 a, b의 특징
a. 함수에 인자로 넘길 수 있다.
b. 함수의 결과로 반환할 수 있다.
c. 값을 수정할 수 있다.
d. 값을 변수에 대입할 수 있다.
- 이러한 모든 연산을 지원하고 있고, 지원하는 "값"들을 일급 객체라고 한다.
- 함수형 프로그래밍 2 : 람다 - 익명함수
- 람다는 익명 함수를 지칭한다.
- 익명 함수 : 이름이 없는 함수, 일급 객체로 취급
- 함수를 값으로 사용할 수도 있으며 파라미터에 전달
- 변수에 대입 하기와 같은 연산 가능
- 스트림
- Stream은 데이터 처리 연산을 지원하도록 소스에 추출된 연속된 요소
- 컬렉션이 데이터를 저장하거나 접근하는 데 초점을 맞춘 인터페이스
- Stream은 데이터를 처리하는 데 초점을 맞춘 인터페이스