함수형 프로그래밍

업데이트:

함수형 프로그래밍

함수형 프로그래밍이란 함수나 메서드가 수학의 함수처럼 동작하는걸 말함, 일반 값처럼 사용해서 인수로 전달하거나 결과로 반환받거나 자류구조에 저장할 수 있음을 의미한다.

 Function<String, Integer> strToInt = Integer::parseInt;

고차원 함수

  • 하나 이상의 함수를 인수로 받는다.
  • 함수를 결과로 반환한다.
Comparator<Apple> c = comparing(::getWeight);

Function<String, String> transFormationPipeline = 
		addHeader.andThen(Letter::checkSpelling)
			.andThen(Letter::addFooter); 

커링

  • 한개의 인수를 갖는 변환함수를 생성하는 팩토리 코드이다.
  • 인자를 여러개 받는 함수를 분리하여 하나의 인자를 받도록 함수를 체인으로 만드는 방법이다.

f, b만 넘겨주면 원하는 작업을 수행할 함수가 반환된다.
DoubleUnaryOperator는 applyAsDouble이라는 메서드를 정의하므로 밑에처럼 변환기를 사용할 수 있다.
아래의 방식으로 변환로직을 재활용 할수 있으며 다양한 변환요소르 함수를 만들 수 있다.

// 기존코드
static double converter(double x, double f, double b) {
	return x * f + b
}

//팩토리를 이용
static DoubleUnaryOperator curriedConverter(double f, double b) {
	return (double x) -> x * f + b;
}

//함수 생성
DoubleUnaryOperator convertCtoF = curriedConverter(9.0/5, 32);
DoubleUnaryOperator convertUSDtoGBP = curriedConverter(0.6, 0);
DoubleUnaryOperator convertKmtoMi = curriedConverter(0.6214, 0);


//반환된 함수를 변환기로 사용
double temperature = convertCtoF.applyAsDouble(32);
double gbp = convertUSDtoGBP.applyAsDouble(500);
double mile = convertKmtoMi.applyAsDouble(1000);

영속 자료구조

함수형 프로그램에서는 함수형 자료구조, 불변 자료구조, 영속자료 구조로 사용된다.
영속이란 저장된 값이 다른 누군가에 의해 영향을 받지 않음을 말한다.

파괴적인 갱신

  • 기존에 있던 값을 바꾸며 갱신, 부작용을 초래한다.
  • 자료구조의 값이 변경이 되면 연산과정에서의 어떤 부작용이 발생할지 알 수 없다.

함수형 갱신

  • 기존에 있던 값을 그대로 두고 그 값을 복사한 값을 결과에 포함시키다.
  • 결과 자료구조의 값을 바꾸지 않는 것이 사용자에게 요구되는 하나의 조건이다.
  • tree update 방식으로 접근시 갱신을 수행할때마다 새로운 자료구조를 만든 후 전달해야 한다.
    • 기존의 자료구조에는 변화가 있으면 안됀다.

스트림과 게으른 평가

스트림은 단 한번 소비가 가능하다는 제약이 있어 재귀적으로 정의 할 수 없다.

… 뒤에는 뭔말인지 잘 모르겠다 다른 사람이 정리한 글 동영상 등 을 확인해보고 실제 코딩을 하면서 이해가 필요해 보인다.

댓글남기기