쏙쏙 들어오는 함수형 코딩 Chapter 1
🖍 쏙쏙 들어오는 함수형 코딩 - 심플한 코드로 복잡한 소프트웨어 길들이기
이 글은 쏙쏙 들어오는 함수형 코딩 - 심플한 코드로 복잡한 소프트웨어 길들이기를 읽고 작성한 글입니다. 함수형도 함수형이지만, 이 책을 통해 좀더 깔끔하고 직관적인 코드를 작성할 수 있을 것이란 팀원들의 의견을 토대로 이번 스터디 서적으로 선정하였습니다.
Chap 1. 쏙쏙 들어오는 함수형 코딩에 오신 것을 환영합니다.
함수형 사고가 무엇인지 그리고 왜 함수형 사고가 더 좋은 소프트웨어를 만드려는 개발자에게 도움이 되는지 설명한다.
함수형 프로그래밍이란?
- 수학 함수를 사용하고 부수 효과를 피하는 것이 특징인 프로그래밍 패러다임
- 부수 효과 없이 순수 함수만 사용하는 프로그래밍 스타일
부수 효과
- 함수가 리턴값 이외에 하는 모든 일
- 리턴값이 필요해서 호출했지만 의도하지 않게 부수효과가 발생할 수 있다.
- ex) 이메일 보내기, 파일 읽기, 웹 요청하기 등
순수 함수
- 인자에만 의존하고 부수 효과가 없는 함수
- 같은 인자를 넣으면 항상 같은 결과를 돌려준다.
정의에 따르면 함수형 프로그래머는 항상 부수 효과를 피하고 순수 함수만 사용해야할 것 같지만,
실제 함수형 프로그래머는 부수 효과와 순수하지 않은 함수를 사용한다.
실용주의자가 바라본 함수형 프로그래밍 정의의 문제점
함수형 프로그래밍의 정의는 학문적으로 가치가 있으나, 실제 프로그래밍을 하는 데에 있어서 큰 도움이 되지 않는다.
문제 1. 부수 효과는 필요하다!
정의에는 부수 효과를 완전히 쓰지 말라는 것처럼 되어 있지만 필요할 때는 써야 한다.(내 생각: react의 useEffect도 필요하다!)
문제 2. 함수형 프로그래밍은 부수 효과를 잘 다룰 수 있다.
순수하지 않음 함수를 잘 다룰 수 있는 기술들이 많이 존재한다.
문제 3. 함수형 프로그래밍은 실용적이다.
정의만 보면 함수형 프로그래밍은 수학적이라 실제 소프트웨어 개발에서 사용하지 않는 것처럼 느껴지지만, 함수형 프로그래밍으로 잘 만들어진 좋은 소프트웨어가 많이 있다.
함수형 프로그래밍을 기술과 개념으로 보기
함수형 프로그래밍의 중요한 개념은 객체지향, 절차지향 프로그래밍을 가리지 않고 모든 프로그래밍 언어에서 사용할 수 있다는 것이다. 함수형 프로그래밍은 코드 어느 곳에서나 적용할 수 있는 유익한 개념이다.
액션과 계산, 데이터 구분하기
함수형 프로그래밍의 시작은 모든 코드를 액션과 계산, 데이터로 구분할 수 있는 것이다.
액션
- 호출하는 횟수나 시점에 영향을 받는 함수(횟수나 시점이 중요한 함수)
- 그러므로 호출 시 조심해야 한다.
- 다른 코드나 소프트웨어 외부에 영향을 줄 수 있다.
계산
- 호출하는 횟수나 시점이 중요하지 않은 함수
- 입력값이 같으면 출력값도 같다.
- 실행하기 전까지는 어떻게 동작할지 알 수 없다.
- 언제, 어디서 계산해도 결과는 같고 외부에 영향을 주지 않는다.(언제든지 몇 번을 불러도 안전하다.)
- 테스트하기 쉽다.
- 액션보다 다루기 쉽다.
데이터
- 호출하는 횟수나 시점이 중요하지 않다.
- 정적이고 보이는 그대로의 값을 갖는다.(이벤트에 대해 기록한 사실이다.)
- 같은 데이터를 여러 형태로 해석할 수 있다.
- 계산보다도 다루기 쉽다.
액션, 계산, 데이터를 구분했을 때의 장점?
- 계산과 데이터는 실행 시점이나 횟수에 의존하지 않는다. 그러므로 코드를 계산과 데이터로 바꿀수록 여러가지 복잡한 문제를 더 쉽게 해결할 수 있다.
- 액션은 실행 시점과 횟수에 의존하기 때문에 문제가 되지만, 코드 전체에 영향을 주지 않도록 격리시키면 된다. 액션을 계산으로 옮기면 다루기 쉬워진다. 또한, 액션을 안전하게 다룰 수 있는 많은 기술들이 있다.
함수형 사고란?
함수형 프로그래머가 소프트웨어 문제를 해결하기 위해 사용하는 기술과 생각
1. 액션과 계산, 데이터를 구분해서 생각하기
코드를 구분하고 액션을 계산으로 리팩토링하고 나머지 액션을 더 쉽게 다루는 방법을 알아야 한다. 그리고 이렇게 분류한 코드가 설계 관점에서 왜 유지보수와 테스트가 쉽고 재사용성이 좋은지 알 수 있어야 한다.
2. 일급 추상의 개념 알기
대부분의 프로그래밍은 재사용을 위해 조금 더 일반적인 함수 이름을 짓기 위해 고민한다. 함수형도 그렇지만, 함수형은 함수에 함수를 넘겨 더 많은 함수를 재사용할 수 있다.
undefined