함수형 프로그래밍
아래 강의를 보고 정리한 글이다.
연봉이 떡상한다고? 함수형 프로그래밍! 10분만에 이해하기.
함수형 프로그래밍이 뭔가요?
함수형 프로그래밍은 코드 작성 스타일이라고 할 수 있다.
함수형 방식에서는 버그 자체가 발생하기 어렵다.
명령형(imperative)
코드와 선언형(declarative)
코드를 살펴본다.
선언형(declarative)코드
선언형 코드는 원하는 결과값을 선언하는 것이다.
- 이거는 이거다.
- input만 똑같으면 절대 다른 요인에 의한 변수가 없다.
대표적인 예로 css가 있다.
배경색을 바꾸고 싶으면 background-color : blue;
라고 적으면 된다.
*원하는 결과를 얻기 위한 단계를 작성하지 않았다.
명령형(imperative)코드
그 결과값에 어떻게 도달하느냐에 관한 것이다.
- 너는 이렇게 하고 이렇게 하고 이렇게 해
코드 예시
text 문자열에서 공백을 제거하고 0으로 대체하는 함수를 만든다고 가정한다.
명령형(imperative)코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
let name = "안녕하세요 haedal blog 입니다."
console.log(spaceToZero(name))
function spaceToZero(text) {
let result = "" ;
for (let i=0; i < text.length; i++) {
if (text[i] === " ") {
result += "0";
} else {
result += text[i];
}
}
return result;
}
- 최종 결과를 보유할 변수를 만들고 있다.
- 완료 후 결과를 리턴한다.
→ 요구사항을 충족하는데 필요한 모든 단계를 하나씩 적고 있다.
선언형(declarative)코드
1
2
3
function spaceToZero(text) {
return text.replaceAll(" ", "0");
}
- replaceAll이라는 메소드를 사용했다.
- 첫 번째 인수는 바꾸고 싶은 텍스트, 두번째 인수는 이를 무엇으로 바꿀 것인가
→ 명령함수와 동일한 결과를 갖지만 읽기가 더 쉽고 함수가 무슨 역할을 하는지 이해하기 편하다.
replaceAll
함수의 내부 작업에서는 이전에 작성한 명령형 코드가 있을 수 있다.
그래서 모든 선언형 코드는 명령 코드 위에 쓰여진다고 말할 수 있다.
명령형 방식에서 코드가 길어지는 것 외에 또 다른 문제점은
요구 사항의 구현이 개발자에게 달려 있기 때문에 코드를 원하는대로 작성하다보면 버그나 실수가 생길 수 있다.
또, 함수가 정확히 무엇을 하려고 하는지 한줄 한줄 읽어야 하므로 다른 팀원들이 이해하기 어려울 수도 있다.
정리
함수형 프로그래밍은 코드 스타일의 차이다.
메소드를 구현해서 다른 곳에서 쓰이면 “선언형“인 것이고
해당 메소드를 구현한 전체 코드가 “명령형“이다.