- 절차지향 프로그래밍: 수행되어야 할 순차적인 처리 과정을 포함하는 방식 (C, C++)
- 객체지향 프로그래밍: 객체들의 집합으로 프로그램의 상호작용을 표현 (C++, Java, C#)
- 함수형 프로그래밍: 순수 함수를 조합하고 소프트웨어를 만드는 방식 (Kotlin)
- 반응형 프로그래밍: 이벤트나 변화에 반응하기위해 비동기적 데이터 처리 및 흐름 기반 프로그래밍 패러다임
- 명령형(Impterative) - 절차형 / 객체지향형
- 선언형(Declarative) - 함수형 / 반응형
함수형 프로그램밍 (Functional Progamming)
명령형 프로그래밍을 기반으로 개발했던 개발자들은 개발하는 소프트웨어의 크기가 커짐에 따라, 복잡하게 엉켜있는 스파게티 코드를 유지보수하는 것이 매우 힘들다는 것을 깨닫게 되었다. 그리고 이를 해결하기 위해 함수형 프로그래밍이라는 프로그래밍 패러다임에 관심을 갖게 되었다. 함수형 프로그래밍은 거의 모든 것을 순수 함수로 나누어 문제를 해결하는 기법으로, 작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이하게 해준다.
부수효과가 없는 순수함수를 1급 객체로 간주하여 파라미터로 넘기거나 반환값으로 사용할 수 있으며, 참조 투명성을 지킬 수 있다.
1. 부수효과 & 순수함수
- 변수의 값이 변경됨
- 자료 구조를 제자리에서 수정함
- 객체의 필드값을 설정함
- 예외나 오류가 발생하며 실행이 중단됨
- 콘솔 또는 파일 I/O가 발생함
이러한 부수 효과(Side Effect)들을 제거한 함수들을 순수 함수(Pure Function)이라고 부른다.
2. 1급 객체 - 다음과 같은 것들이 가능한 객체를 의미한다.
- 변수나 데이터 구조 안에 담을 수 있다.
- 파라미터로 전달 할 수 있다.
- 반환값으로 사용할 수 있다.
- 할당에 사용된 이름과 무관하게 고유한 구별이 가능하다.
3. 참조 투명성
함수를 실행하여도 어떠한 상태의 변화 없이 항상 동일한 결과를 반환하여 항상 동일하게(투명하게) 실행 결과를 참조(예측)할 수 있다는 것을 의미한다. 즉, 어떤 함수 f에 어떠한 인자 x를 넣고 f를 실행하게 되면, f는 입력된 인자에만 의존하므로 항상 f(x)라는 동일한 결과를 얻는다는 것을 의미한다.
부작용을 제거하여 프로그램의 동작을 이해하고 예측을 용이하게 하는 것은 함수형 프로그래밍으로 개발하려는 핵심 동기 중 하나이다. -> 병렬 처리 환경에서 개발할 때 Race Condition에 대한 비용을 줄여준다
< 출처: https://mangkyu.tistory.com/111 [MangKyu's Diary] >
반응형 프로그래밍 (Reactive Progamming)
이벤트나 변화에 반응하기위해 비동기적 데이터 처리 및 흐름 기반 프로그래밍 패러다임
즉, 관찰 가능한 Component를 만들고, 이것의 변화를 감지(listen, observe)하여 변화가 일어날 때마다 처리
반응형 프로그래밍 코드 사례
명령형 프로그래밍 | 반응형 프로그래밍 |
b = 10, c = 20, a = b + c print(a); → a = 30 출력 c = 30 print(a) ; → a = 30 출력 |
b = 10, c = 20, a = b + c print(a); → a = 30 출력 c = 30 |
'기초 컴퓨터 공학' 카테고리의 다른 글
MVC 패턴 (0) | 2021.09.05 |
---|---|
디자인 패턴 (0) | 2021.09.05 |
TDD (Test-Driven Development) (0) | 2021.09.05 |
REST, RESTful API (0) | 2021.09.05 |
프로그램 개발 과정 (C++ 기준) (0) | 2021.09.05 |