320x100
320x100

함수형 프로그래밍 (Functional Programming)

: 순수 함수를 조합하고 소프트웨어를 만드는 방식 (클로저, 하스켈, 리스프)

: 작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이하게 해줌

: 무엇을(what)에 중점을 두는 프로그래밍 방식

 

 

 

 

함수형 프로그래밍의 특징

: 부수 효과가 없는 순수 함수를 1급 객체로 간주하여 파라미터나 변환값으로 사용할 수 있으며, 참조 투명성을 지킬 수 있다

 

- 부수효과 (Side Effect)

: 변화 또는 변화가 발생하는 작업

: 변수의 값이 변경됨

: 자료 구조를 제자리에서 수정함

: 객체의 필드값을 설정함

: 예외나 오류가 발생하여 실행이 중단됨

: 콘솔 또는 파일 I/O가 발생함

 

- 순수 함수 (Pure Function)

: 부수 효과들을 제거한 함수

: Memory or I/O 관점에서 부수 효과가 없는 함수

: 함수의 실행이 외부에 영향을 끼치지 않는 함수

: 쓰레드의 안정성을 보장받아 병렬 처리를 동기화 없이 진행할 수 있음

 

- 1급 객체 (First-Class Object)

: 변수나 데이터 구조 안에 담을 수 있는 객체

: 파라미터로 전달할 수 있음

: 반환값으로 사용할 수 있음

: 할당에 사용된 이름과 무관하게 고유한 구별이 가능

 

- 참조 투명성 (Referential Transparency)

: 동일한 인자에 대해 항상 동일한 결과를 반환하는 객체

: 참조 투명성을 통해 기존의 값은 변경되지 않고 유지됨 (Immutable Data)

 

 

 

 

 

함수형 프로그래밍의 장단점

- 장점

: 높은 수준의 추상화를 제공

: 함수 단위의 코드 재사용이 수월함

: 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬워짐

 

- 단점

: 순수 함수를 구현하기 위해서는 코드의 가독성이 좋지 않을 수 있음

: 함수형 프로그래밍에서는 반복이 아닌 for문이 재귀를 통해 이루어 지는데 (deep copy), 재귀적 코드 스타일은 무한 루프에 빠질 수 있음

: 순수 함수를 사용하는 것은 쉬울 수 있지만 조합하는 것은 쉽지 않음

 

 

 

 

출처: https://velog.io/@teo/functional-programming#:~:text=%EC%9A%B0%EB%A6%AC%EA%B0%80%20%EC%9D%B5%ED%9E%88%20%EB%93%A4%EC%96%B4%20%EC%95%8C%EA%B3%A0,%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%20(%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC%9E%84)%20%EC%9D%B4%EB%9D%BC%EA%B3%A0%20%EB%B6%80%EB%A6%85%EB%8B%88%EB%8B%A4.

불변성

- pass by reference (깊은 복사)

: 배열이나 객체의 모든 구조를 복사하는 것

: 복사한 객체를 변경하면 복사된 객체도 같이 변경됨

 

- pass by value (Copy on Write / 얕은 복사)

: 배열이나 객체의 값을 조작하지 않고 값만 복사하는 것

 

 

 

 

 

 

Reference

 

[프로그래밍] 함수형 프로그래밍(Functional Programming) 이란?

1. 함수형 프로그래밍(Functional Programming)에 대한 이해 [ 프로그래밍 패러다임(Programming Paradigm) ] 프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를

mangkyu.tistory.com

 

함수형 프로그래밍이란?

jongminfire.dev

 

다시 쓰는 함수형 프로그래밍

> 참 좋은데 어떻게 표현할 방법이 없네... 오랜 기간 개발을 공부하게 되면서 여러가지 패러다임의 변화를 겪었는데 그 중에서 인상깊었던 것중에 하나는 객체지향 패러다임에서 함수형 패러다

velog.io

300x250
728x90