함수형 프로그래밍
2022. 8. 1. 20:44ㆍJava
함수형 프로그래밍
자료처리를 수학적 함수의 계산합니다.
상태와 데이터가 변하는 것을 지양하는 프로그래밍 패러다임입니다.
함수형 프로그래밍의 특징
1. 순수함수(Pure function)
- 동일한 입력에는 항상 같은 값을 반환해야 한다.
- 함수의 실행이 프로그램의 실행에 영향을 미치지 않아야 한다.
- 함수 내부에서 인자의 값을 변경하거나 프로그램 상태를 변경하는 Side Effect가 없어야 한다.
순수함수가 아닌 함수의 예
int num = 3;
int add(int a) { // 함수 밖에 있는 num을 참조하기 때문에 순수함수라고 볼 수 없다.
return a+num;
}
순수 함수는 프로그램의 변화 없이 입력 값에 대한 결과를 예상 할 수 있어 테스트가 용이합니다.
2. 비상태, 불변성(Stateless, Immutability)
- 함수형 프로그래밍에서의 데이터는 불변성을 유지해야 합니다.
- 데이터의 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고 그 데이터의 복사본을 만들어야 합니다.
불변성을 만족시키지 못하는 함수의 예
String[] names = ["Apple", "Banana", "Mange"];
String[] changeNameToBoB(int index) {
names[index] = "BOB" // names의 구조가 변경되면 안 된다!
return names;
}
3. 선언형 함수(Expressions)
- 명령형 프로그래밍은 무엇을 어떻게 할 것인가에 주목하고, 선언헌 프로그래밍은 무엇을 할 것인가에 주목합니다.
명령형 함수의 예
// 1 3 5 7 9 평균값 구하기 프로그램
public class Main {
public static void main(String[] args) {
int[] nums = {1, 3, 5, 7, 9};
long sum = 0;
for (int num : nums) {
sum += num;
}
long aver = sum / nums.length;
System.out.println(aver);
}
}
선언헌 함수의 예
// 1 3 5 7 9 평균값 구하기 프로그램
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.of(1, 3, 5, 7, 9).average().ifPresent(System.out::println);
}
}
4. 1급 객체와 고차 함수(First-class, Higher-order functions)
함수형 프로그래밍에서 함수는 1급 객체입니다.
1급 객체의 특징
- 변수나 데이터 구조안에 담을 수 있다.
- 파라미터로 전달 할 수 있다.
- 반환값(return value)으로 사용할 수 있다.
- 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
- 동적으로 프로퍼티 할당이 가능하다.
그리고 1급 객체는 고차 함수의 속성을 가져야 합니다.
고차 함수 속성
- 함수를 인자로써 전달 할 수 있어야 한다.
- 함수의 반환 값으로 또 다른 함수를 사용 할 수 있다
'Java' 카테고리의 다른 글
GC (0) | 2022.08.01 |
---|---|
Overloading vs Overriding (0) | 2022.07.22 |
String, StringBuilder, StringBuffer (0) | 2022.07.21 |
정렬(Sort) (0) | 2022.07.19 |
객체 지향 vs 절차 지향 프로그래밍 (0) | 2022.07.18 |