함수형 프로그래밍
함수형 프로그래밍이란, 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나. 부수 효과를 없애고 순수 함수를 만들어 모듈화 수준을 높이는 프로그래밍 패러다임.
- 부수 효과 : 객체의 상태를 변화 시키는 것 (파라미터 포함)
- 순수 함수 : 부수효과가 없는 함수. 동일한 인자를 주었을 때 항상 같은 값을 리턴하는 함수, 외부의 상태를 변경하지 않는 함수. 데이터의 값을 변경하거나 객체의 필드값을 설정하는 등의 작업을 하지 않는 함수
- 모듈화 : 기능을 분할하고 추상화하여 소프트웨어의 성능을 향상시키고 유지보수를 효과적으로 하기 위한 구현 기법
함수형 프로그래밍을 배우는 이유
- 기존 절차적 프로그래밍과 객체 지향형 프로그래밍과는 다른 새로운 방식으로 사고하는 방법을 배우는 것
- 함수형 프로그래밍은 사고의 전환을 필요로 하여, 이를 통해 다양한 사고방식으로 프로그래밍을 바라봄으로써 유연한 문제해결이 가능
함수형 프로그래밍의 특징
- 순수함수
- 동일한 입력에는 항상 같은 값을 반환해야 하는 함수
- 함수의 실행이 프로그램의 실행에 영향을 미치지 않아야 하는 함수
- 함수 내부에서 인자의 값을 변경하거나 프로그램 상태를 변경하는 Side Effect가 없는 것
- 프로그램의 변화 없이 입력 값에 대한 결과를 알 수 있어 테스트 용이
- 비상태, 불변성
- 데이터의 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고 그 데이터의 복사본을 만들어서 그 일부를 변경하고, 변경한 복사본을 사용해 작업 진행
- 선언형 함수
- 명령형 프로그래밍은 무엇을 어떻게 할 것인가에 주목하고, 선언헌 프로그래밍은 무엇을 할 것인가에 주목
- for, while과 같은 반복문을 사용하지 않고, map, filter 같은 함수를 매개변수로 받는 메서드 이용
- 1급 객체
- 변수나 데이터 구조안에 담을 수 있음
- 파라미터로 전달 할 수 있음
- 반환값(return value)으로 사용할 수 있음
- 할당에 사용된 이름과 관계없이 고유한 구별 가능
- 동적으로 프로퍼티 할당 가능
- 고차함수
- 함수를 인자로 받거나 함수를 반환 값으로 이용할 수 있는 것
함수형 프로그래밍을 OOP에서 사용하는 이유
- 함수적 프로그램은 추상화 레벨이 높아, 코드의 동작을 추론하기 쉽다. 로직의 골격만 남아, 함수를 호출하는 코드를 함수 구현문으로 대체할 수 있기 때문에 개발자는 구현문을 통해 추론이 가능하다.
- 반환되는 값 예측이 가능하다. 함수형 프로그래밍은 불변성으로 선언한 값을 복사해 변경하기 때문이다.
- 전역 상태를 허용하지 않는다.
- 멀티스레드에서 안전성을 지원하여, 스레드 간 객체를 안전하게 공유할 수 있다. 함수형 프로그래밍은 순수함수를 만들기 때문에 객체 전달 시 변이를 막을 수 있다.
- 개발자는 멀티스레드 환경에서 공유자원에 대한 락, 동기화를 고려하며 코딩할 필요가 없다.
- 부수효과를 제거했기 때문에 재사용이 가능하며, 테스트하기 쉽다.
- 멀티코어를 이용한 병렬 처리하는 것이 비용이나 속도면에서 더 유리하다.
함수형 프로그래밍 장점
- 높은 수준의 추상화를 제공한다
- 함수 단위의 코드 재사용이 수월하다
- 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬워진다
함수형 프로그래밍 단점
- 순수함수를 구현하기 위해서는 코드의 가독성이 좋지 않을 수 있다
- 함수형 프로그래밍에서는 반복이 for문이 아닌 재귀를 통해 이루어지는데 (deep copy), 재귀적 코드 스타일은 무한 루프에 빠질 수 있다
- 순수함수를 사용하는 것은 쉬울 수 있지만 조합하는 것은 쉽지 않다
추가 공부 자료 : https://jongminfire.dev/함수형-프로그래밍이란
'프로그래밍 > JAVA' 카테고리의 다른 글
AOP란, (0) | 2022.02.21 |
---|---|
Spring Framework란, (0) | 2022.02.20 |
JVM란, (0) | 2022.02.07 |
어노테이션 (0) | 2022.01.16 |
객체 지향 프로그램이란, (0) | 2022.01.16 |