반응형
프로그래밍 패러다임
명령형 프로그래밍은 무엇을 어떻게 할 것인가에 가깝고, 선언형 프로그래밍은 무엇을 할 것인가와 가깝다.
명령형 프로그래밍
- 절차지향 프로그래밍: 수행되어야 하는 순차적인 처리과정을 포함하는 방식.
- 객체지향 프로그래밍: 객체들의 집합과 상호작용으로 애플리케이션을 구성.
선언형 프로그래밍
- 함수형 프로그래밍: 순수 함수를 조합하고 소프트웨어를 만드는 방식
명령형 프로그래밍에서는 상태를 바꾸는 것을 강조하는 것과는 달리, 함수형 프로그래밍은 함수의 응용을 강조한다. (위키피디아)
함수형 프로그래밍의 개념
일급 시민인 함수 (first-class)
- 함수를 일반 값처럼 다룰 수 있다.
- 함수를 변수에 저장할 수 있고, 함수를 인자로 다른 함수에 전달할 수 있으며, 함수에서 새로운 함수를 만들어서 반환할 수 있다.
불변성 (immutability)
- 내부 상태가 절대 바뀌지 않는 불변 객체를 사용.
부수 효과(side-effect) 없음
- 입력이 같으면 항상 같은 출력을 내놓고 다른 객체의 상태를 변경하지 않는 순수 함수(pure function)를 사용한다.
함수형 프로그래밍의 장점
간결성
- 그에 상응하는 명령형 코드에 비해 더 간결하며 우아하다.
다중 스레드를 사용해도 안전하다 (Safe multithreading)
- 다중 스레드 프로그램은 적절한 동기화 없이 같은 데이터를 여러 스레드가 변경하는 경우 가장 많은 문제가 생긴다.
- 불변 데이터 구조를 사용하고 순수 함수를 그 데이터 구조에 적용한다면 다중 스레드 환경에서 같은 데이터를 여러 스레드가 변경할 수 없다. 따라서 복잡한 동기화를 적용하지 않아도 된다.
테스트하기 쉬움
- 부수 효과가 있는 함수는 그 함수를 실행할 때 필요한 전체 환경을 구성하는 준비 코드가 따로 필요하지만, 순수 함수는 그런 준비 코드 없이 독립적으로 테스트할 수 있다.
참고
반응형
'공통 > 기타' 카테고리의 다른 글
객체 지향? 객체 지향의 특성 (0) | 2021.05.17 |
---|---|
링커와 로더 (0) | 2021.04.02 |
SOLID 원칙이란? (0) | 2021.03.18 |
AOP란? 횡단 관심사? 흩어진 관심사? (0) | 2021.02.16 |