1 함수형 프로그래밍이란?
1) 함수형 프로그래밍 vs 객체지향 프로그래밍
- 함수형과 객체지향은 아래와 같은 특징을 가지고 있다.
함수형 | 객체지향 | |
---|---|---|
패러다임 | 선언형 | 명령형(또 다른 예로 절차지향언어도 포함) |
요약 | 무엇을 처리할 것인가 | 어떻게 처리할 것인가 |
특징 | - 받은 인자만으로 결과물을 내어야 함 - 원본 데이터는 불변해야함 |
- 우리가 자주 사용하는 방법 - 로직을 상태와 행위로 이루어진 객체로 만듬 - 이 객체들을 조립해서 하나의 프로그램을 만드는 것 - 객체를 만드는 것 |
필요성 | - 동시성 작업을 안전하게 하고 싶을 때 - 원본 데이터를 손상시키면 안 될 때 - 라이브러리를 만들 때 |
- 객체를 만들어야 할 때 - 일반적으로 이 방법을 많이 씀 |
저 표의 내용들이 전부 다 이해되시나요?전 안 됩니다 ^^ 더 이해가 쉽게 알아볼까요?
2) 함수형, 객체지향 차이를 자세히 알아보자.
- 우리가
서울역
에서부산역
을 가려고 합니다. - 요즘에는 지도앱이 잘 되있어서 길찾기를 이용하죠!
- 만약 길을 찾는다고 했을 때, 길을 어떻게 가야할까요?
함수형 | 객체지향 | |
---|---|---|
가정 | - 부산역으로 가는 경로를 이미 알고 있다. | - 부산역으로 가는 정보가 없다. |
로직 | - 부산역은 부산광역시 초량동에 위치해 있다. | - 서울역 버스 환승센터로 간다. - 406버스를 타고 23분 이동한다. - 서울 고속버스터미널에선 내린다. - 서울고속버스터미널에서 4시간 20분 동안 이동한다. 등등.. |
예시 |
- 표를 보면 알 수 있듯이
함수형
은어떻게 가는지
보다어디(what)에 도착하는지
만 중요합니다. - 하지만
객체지향
은어떻게 가는지(HOW)
에 대한 상세한 정보가 필요합니다.
- 또 다른 예시로 자동차를 들어봅시다!
- 자동차에 기어를 넣는 방식은
오토
와스틱
방식이 있는데요 - 이 두 함수들은 기어를 바꿀 때 어떻게 할까요?
함수형 | 객체지향 | |
---|---|---|
방식 | - 오토 방식으로 기어 변속을 한다. | - 스틱 방식으로 기어 변속을 한다. |
예시 |
또 하나의 예시로 코드를 볼까요?
3) 홀수 n개 더하기
(1) 객체지향 프로그래밍
- 여러분들이 해당 코드 방식에 익숙하다면 코드를 보자마자 이해가 되실 겁니다.
- 하지만 코드를 한 번도 작성해보지 않은 사람들은 이해하기가 쉽지 않죠.
- 객체지향 함수는
어떻게
진행되는지과정
이 담겨있어 직관적으로 이해하기 어렵습니다. - 객체지향은 너무 상세해서,
결과를 바로 보여주지 않고
과정을 다 보여줍니다
.
function f1(limit, list) {
let result = 0; //1. 결과값을 담는 변수
for(const a of list) { //2. 반복문을 돌린다.
if (a%2) { //3. 만약 홀수라면
const b = a*a; //4. 이 값을 제곱하고
result += b; //5. 더한다
if (--limit === 0) break; //6. 단, limit번 숫자까지만 더한다.
}
}
console.log(result);
}
(2) 함수형 프로그래밍
- 그에 반해 함수형은
결과만
을 보여줍니다. - 만약 각 함수의 의미만 알고 있다면, 코드를 직관적으로 이해할 수 있죠^^
함수명 | 설명 |
---|---|
go |
인자를 받아 결과를 바로 산출 함수별 자세한 설명은 다음장에서 진행 >_0 |
filter |
조건에 해당하는 원소만 취함 |
map |
특정 원소를 변형하여 사용함 |
take(limit, arr) |
limit 개의 원소만 이용 |
reduce(acc, a) |
원소를 더한 값을 나타냄 |
function f7(limit, list) {
_.go(
list,
L.filter(a => a%2), // if === filter
L.map(a => a*a), // 연산한 값을 사용할 때 === map
L.take(limit), //시간복잡도 줄일 때
_.reduce(add), //모든 값들을 더할 때
console.log);
}
대충 함수형에 대해 알았겠다! 다음장에서는 명령형을 함수형으로 바꾸어봅시다!
출처
너무 잘 설명된 사이트들, 구경하러 가세요 ^0^
반응형
'개발 기술 > 함수형 프로그래밍' 카테고리의 다른 글
함수형 코드 만들기, 합성함수 (0) | 2021.09.26 |
---|---|
함수형 코드 만들기, 별 그리기 & 구구단 (0) | 2021.09.26 |
함수형 코드 만들기, 홀수 n개 더하기 (0) | 2021.09.26 |
댓글