함수형 프로그래밍 (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), 재귀적 코드 스타일은 무한 루프에 빠질 수 있음
: 순수 함수를 사용하는 것은 쉬울 수 있지만 조합하는 것은 쉽지 않음
불변성
- pass by reference (깊은 복사)
: 배열이나 객체의 모든 구조를 복사하는 것
: 복사한 객체를 변경하면 복사된 객체도 같이 변경됨
- pass by value (Copy on Write / 얕은 복사)
: 배열이나 객체의 값을 조작하지 않고 값만 복사하는 것
Reference
'Development > Development' 카테고리의 다른 글
데코레이터와 어노테이션 (0) | 2023.03.10 |
---|---|
추상 클래스와 인터페이스의 차이 (0) | 2023.03.10 |
객체 지향 프로그래밍에 대해 알아보자 (0) | 2023.03.10 |
모든 주니어 개발자들에게 전하는 충고 5 (0) | 2023.02.06 |
프로젝트에 적용할 만한 기술 스택 (0) | 2023.02.06 |