함수형 프로그래밍에 대해[링크]
인터넷에서 함수형 프로그래밍에 대해 찾아보면 여러 글들이 나옵니다. 그런데 음.. 잘 작성된 글이 바로 나오지는 않더라구요.
개인적으로 보기에는 아래의 글이 괜찮아 보여 링크 남깁니다. ㅎㅎ
아래의 내용이 함수형 프로그래밍에 대한 정의?입니다.
함수형 프로그래밍은 순수 함수를 작성하는 것, 그러니까 숨겨진 입력이나 출력을 최대한 제거하여 가능한한 우리 코드의 대부분이 단지 입력과 출력의 관계를 기술하게끔 하는 것
좀 어려운 말일 수도 있는데요, 어떤 함수를 부를 때 동일한 인자 값을 줬다면 동일한 리턴 값을 얻어야 하며, 다른 데이터에 영향을 주면 안됩니다.
만약 어떤 함수에서 주어진 인자 뿐만 아니라 함수 외부의 다른 값에 영향을 받는다면.. 동일한 인자값을 주고 함수를 불러도 다른 결과를 얻게 됩니다. 이런 것은 함수형 프로그래밍에서 지양하는 것이 아닙니다.
위키피디아의 설명도 보겠습니다.
In computer science, functional programming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm in which function definitions are trees of expressions that each return a value, rather than a sequence of imperative statements which change the state of the program.
함수형 프로그래밍은 프로그램(코드)이 함수들로 구성되게 하는 프로그래밍 패러다임입니다. 함수형 프로그래밍은 선언형 프로그래밍에 속하는데 여기서 함수는 expression으로 이루어지고 값을 리턴합니다. 프로그램의 상태(메모리)를 바꾸는 명령문의 연속과 다릅니다.
┌명령형(Impterative) ┌ 절차형
│ └ 객체지향형
└선언형(Declarative) ┌ 함수형
└ Reactive
함수형 프로그래밍은 프로그래밍 분류에서 선언형 프로그래밍에 속합니다.
for (int i=0; i<list.size(); i++) {
if (list.get(i).weight >= 50) {
newList.add(list.get(i));
}
}
자바에서 위 코드와 같이 for문을 써서 특정 값을 추출하는 것은 아주 흔히 접할 수 있습니다. 단순하게 명령문들을 순서에 맞게 실행하면서 프로그램의 상태(메모리)를 변경합니다. 명령문.. 그래서 명령형(Imperative) 프로그래밍이라 불리는 것 같습니다.
자바에서 stream과 람다를 이용하면 위 코드를 함수형 프로그래밍으로 표현할 수 있습니다.
List<MyItem> newList = list.stream().filter(item -> item.weight >= 50).collect(Collectors.toList());
처음 접하면 이 짧은 코드에 거부감이 들 것입니다. 하지만 이처럼 자바에서 미리 만들어놓은 순수 함수를 사용한다면 보기에도 더 좋고 유지 보수도 더 쉬워집니다.
명령형 프로그래밍에서는.. 하나하나 명령문을 적어서 코드를 작성했다면,
함수형 프로그래밍에서는 잘 만들어진 순수함수들을 사용해 그것들을 잘 가져와서 사용(선언)만 하면 됩니다.
아래의 글도 설명이 좋네요~
blog.naver.com/sychoi2008/222224075467
참고
blog.naver.com/lcgyung88/221982463057
Kris Jenkins(@krisjenkins)의 의 blog.jenkster.com/2015/12/what-is-functional-programming.html 를 번역한 내용입니다.
en.wikipedia.org/wiki/Functional_programming
댓글 영역