TIL (학습정리) - 200122

케이·2022년 1월 20일
0
post-thumbnail

스스로 부족한 것을 채우기 위한 학습 기록입니다. 부족함을 알고 채워나가려 노력하고 있습니다. 피드백은 언제나 환영합니다.😺

함수형 프로그래밍

함수형 프로그래밍이란?

  • 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나.
  • 명령형 프로그래밍에서는 상태를 바꾸는 것을 강조하지만 함수형 프로그래밍에서는 함수의 응용을 강조한다.
    • 함수도 값이다
  • '식'이나 '선언'으로 수행되는 선언형 프로그래밍 패러다임을 따른다.
    • 함수형 프로그램은 선언형이다! -> 이거는 이거다!
  • 람다 대수에 근간을 둔다.

함수형 프로그램을 위해서는?

  1. Pure functions: 순수 함수 이어야 하고
  2. Stateless, Immutability: 비상태와 불변성을 유지해야 한다 -> 외부의 상태나 함수의 인자로 전달된 데이터의 상태를 변경하지 않음으로서 사이드 이펙트를 만들지 않는다.
  3. Expression only!: if나 switch 등을 사용하지 않아야 한다.
  4. First-class and higher-order functions: 일급 함수의 특징과 고차 함수. 이 두가지 속성을 가지고 있어야 한다.

순수함수?? (Pure function)

  • 부작용이 없는 함수. 즉, 함수의 실행이 외부에 영향을 끼치지 않는 함수를 뜻한다.
  • 예를 들어, 인풋과 아웃풋이 있다. 외부 환경으로부터 철저히 독립적이고 같은 인풋에 있어서는 언제나 동일한 아웃풋을 생산한다. (참조투명성) 이것이 순수함수
//순수함수
public static String greetings(String name){
		return "Hello" + name;
}

고차함수?? (Higher-order function)

  • 함수를 인자로 받거나 출력값으로 함수를 반환하는 함수
  • 함수형 언어에서는 함수도 '값(value)'으로 취급한다.
<Java>
Function<String, Function<String, String>> greeting = (greetingText) -> {
	return (name) -> {
    	return greetingText + " " + name;
       };
   };
  • 위의 코드 예제에서 greeting 함수는 인사말을 입력 받고 함수를 반환한다.

  • 아래는 자바스크립트에서의 고차함수 예제이다.

<JS>
const arr1 = [1,2,3];
const arr2 = arr1.map(function(item) {
	return item * 2;
});

console.log(arr2);

클로져?? (closure)

  • 내부 함수에서 외부함수의 값에 접근하고 외부함수가 종료되어도 계속 접근 할 수 있는 것.
  • 자바에서 클로저는 함수의 인스턴스.
  • 람다가 static method와 비슷하다면 외부 변수를 참조하는 익명 클래스가 클로저와 비슷하다고 볼 수 있다.

참고

https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
https://www.youtube.com/watch?v=jVG5jvOzu9Y
https://www.youtube.com/watch?v=4ezXhCuT2mw
https://warpgate3.tistory.com/entry/%EC%9E%90%EB%B0%94%EC%BD%94%EB%93%9C%EB%A1%9C-%EB%B3%B4%EB%8A%94-%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-Functional-Programming-in-Java

profile
삽질하며 깨닫고 배웁니다. (a.k.a 프로삽질러) + 이 구역의 회고왕

0개의 댓글