반드시 "함수형 프로그래밍"을 알아야 할까?

Yuri Lee·2022년 3월 27일
0

이 글은 '노마드 코더 Nomad Coders'님 의 영상 내용을 바탕으로 정리한 내용입니다.

Intro

함수형 프로그래밍이 무엇이고, 왜 알아야 하는지에 대해 알아보도록 하자.🤗

함수형 프로그래밍

개발자는 반드시 함수형 프로그래밍을 배워야 한다고 생각한다. 함수형 프로그래밍은 코드 작성 스타일이라고 할 수 있다. 아예 함수형 코드로 만들어진 언어들도 있다. 그렇다 하더라도 이 개념을 알아놓으면 (배워놓으면) 무슨 언어로 코드를 작성하든 도움이 될 것이다. 함수형 프로그래밍을 배우면, 프로그래밍 문제를 해결할 때 유용한 새로운 관점과 접근 방식을 얻을 수 있다. 일종의 새로운 사고방식을 배우는 것이다. 함수형 프로그래밍에 따라 코드를 작성할 경우 깨끗한 코드를 작성할 수 있고, 버그가 쉽게 숨겨지지 않는다. 이미 좋은 기술과 경력을 갖춘 시니어 개발자들은 점진적으로 함수형 프로그래밍 언어를 사용한다.

함수형 프로그래밍을 실제로 이해하는 것이 어려워울 수 있는데, 이는 함수형 프로그래밍에 대한 많은 설명들이 개념의 정의에만 집중하기 때문이다. (ex. purity, immutability, side effects 같은 것들...) 이러한 개념들의 정의만 할 뿐, 정작 개발자들에게 왜 더 좋은 건지 설명하지 않는다. 코딩을 하면서 이를 경험하지 않는 한 알 수 없다. 역사, 개념, 정의만 배워서는 제대로 이해할 수가 없다. 코드를 비교하면서 어떻게 다르고 어떤 장단점이 있는지 살펴보자.

명령형(imperative)코드와 선언형(declarative)코드 차이

  1. 명령형(imperative)코드
Make me a sandwich
  1. 선언형(declarative)코드
1. bread toast
2. apple + cheese + tomato cut
3. com bine
4. done! 

선언형(declarative)코드는 원하는 결과를 얻기 위해 필요한 지침에 따라 코드가 작성된다. CSS는 선언형 언어이다. declarative

body {
	color: red
}

선언형 코드는 원하는 결과값을 선언하는 것이다. 명령형 코드는 그 결과값에 어떻게 도달하느냐에 관한 것이다.

코드 예제

텍스트 문자열에서 공백을 제거하고 대신 하트 이모티콘으로 대신하는 코드를 구현해보자.

명령형

function spaceToHeart(text) {
  let result = "";
  for (let i = 0; i < text.length; i++) {
    if (text[i] === " ") {
    	result += "하트";
    } else {
      result += text[i];
    }
  }
  return result;
}

선언형

function spaceToHeart(text) {
  return text.replaceAll(" ", "하트");
}

replaceAll() 메소드를 사용한다. 이 두가지 코드를 비교했을 때 declarative 코드는 읽기가 더 쉽고, 함수가 무슨 역할을 하는지 이해하기가 편하다. replaceAll 함수의 내부 작업에는 명령형 코드가 있을 수 있다. 모든 선언형 코드는 명령형 코드 위에 쓰여진다고 말할 수 있다. 그러나 개발자들은 명령형 코드 대신에 명령형 코드 방식을 피할 수 있는 함수 등을 활용할 수 있다.

명령형 방식에서 코드가 길어지는 것 외에 또 다른 문제점은 요구사항의 구현이 개발자인 우리에게 달려 있기 때문에 코드를 원하는 대로 작성하면 버그나 실수가 더 생기기 쉽다. 팀 동료들은 또한 이해하기 어려울 수 있다. 해당 함수가 정확히 무엇을 하려고 하는지 한줄 한줄 자세히 읽어야 한다.

function checkForOdd(item) {
  return item % 2 === 0;
}

fu nction removeOdd(items) {
  return items.filter(checkForOdd);
}

filter 함수는 조건을 통과하는 모든 요소를 포함하는 배열을 반환한다. 배열에 적용할 필터가 무엇인지 설명했을 뿐 어떻게 적용되는지는 중요하지 않다.

conclusion

개인적으로 선언형을 최대한 자주 쓰려고 한다. 어떤 사람들은 선언형을 싫어하는데 replaceAll과 filter와 같은 것들을 미리 알아야 하기 때문이다. 하지만, 항상 그러하듯, 각 업무에 적합한 도구를 쓰는 게 중요하다.


https://www.youtube.com/watch?v=7aEQLvvnQIY

profile
Step by step goes a long way ✨

0개의 댓글