패러다임 발전과정
순차적 프로그래밍
- 말 그래도 순차적으로 코딩해 나가는 방법이다.
- 필요한 것이 있으면 계속 순서대로 추가해가며 구현하는 방식이다.
문제점: 점점 규모가 커지게 되면 나중에 어떻게 코드가 연결되어 있는지 확인조차 하지 못하게 될 가능성이 존재한다.
" 코딩보다 흐름을 이해하는 데 시간을 다 소비할 가능성이 크다 "
절차적, 구조적 프로그래밍
- 반복될 가능성이 있는 것들을 재상요이 가능한 함수로 만들어 사용하는 방법이다.
- 절차는 함수를 뜻하고, 구조는 모듈을 뜻한다.
문제점: 너무 추상적이다. 함수는 논리적 단위로 표현되지만, 실제 데이터에 해당하는 변수나 상수 값들은 물리적 요소로 되어있기 때문이다. 즉 논리적, 물리적 단위를 함께 묶을 수 있는 방법이 필요하게 된다.
객체 지향 프로그래밍
- 논리적 단위의 함수와 물리적 단위의 자료형을 객체로 함께 묶어서 관리하는 방법이다
- 클래스로 선언된 객체 내부에 자료형과 함수가 같이 존재한다.
- 객체 간의 독립성이 생기고 중복코드의 양이 줄어들고, 독립성이 확립되면 유지보수에도 도움이 된다.
함수형 프로그래밍
- 순수 함수를 조합하고 소프트웨어를 만드는 방식이다
- 상태와 Data를 변경하는 것을 피하면서 프로그래밍하는 방식이다
- 코드가 더 간결하고 예측 가능하며 테스트하기가 쉽다.
함수형 프로그래밍의 특징
1. 1급 객체(First Object)
가. 변수나 데이터 구조안에 담을 수 있다.
나. 파라미터로 전달이 가능하다.
다. 반환값(Return)으로 사용할 수 있다.
라. 할당에 사용된 이름과 관계없이 고유한 구별이 가능한다.
마. 동적으로 프로퍼티 할당이 가능하다.
2. 고차함수(High-Order Function)
고차함수는 1급객체의 부분 집합이다. 람다 계산법에서 만들어진 용어이다.
가. 함수에 함수를 파라미터로 전달할 수 있다.
나. 함수에 반환값으로 함수를 사용할 수 있다.
3. 불변성(Immutability)
함수형 프로그래밍에서 데이터가 변할 수 없는데, 이를 불변성 데이터라 한다.
데이터 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고, 그 데이터의 복사본을 만들어 그 일부를 변경하고, 변경한 복사본을 사용해 작업을 진행한다.
* 불변성을 만들어 줄 수 있는 함수들: Array.map, Array.filter, Array.find, Array.reduce 등 (JavaScript 기준)
4. 순수 함수(Pure Function)
순수함수를 호출하면 프로그램의 어떠한 변화도 없고, 입력 값에 대한 결과를 예상할 수 있어서 테스트가 용이하다.
가. 동일한 입력에는 항상 같은 값을 반환해야 한다.
나. 함수의 실행은 프로그램의 실행에 영향을 미치지 않아야한다. 즉 Side effect가 없어야 한다.
함수형 프로그래밍은 순수함수를 조합하고 변경가능한 데이터 및 부작용(Side effect)을 피하여 소프트웨어를 만드는 프로세스이다.
'기타' 카테고리의 다른 글
웹 캐시 (0) | 2020.01.14 |
---|---|
크로스 브라우징 (0) | 2020.01.10 |
RESTful API (0) | 2020.01.10 |
HTTP & HTTPS (0) | 2020.01.04 |
대칭키 & 공개키 & SSL (0) | 2020.01.04 |