함수형 프로그래밍

2022. 8. 1. 20:44Java

함수형 프로그래밍

 자료처리를 수학적 함수의 계산합니다. 

 상태와 데이터가 변하는 것을 지양하는 프로그래밍 패러다임입니다. 

함수형 프로그래밍의 특징

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