-
[프로그래밍] 순수함수기타 2021. 5. 23. 18:26반응형
리액트 , 리덕스 , 함수형 프로그래밍 등등 공부하다가 보면 side effect 니 뭐니 immutable 몇가지 개념들과 함께 순수함수에 대한 이야기들이 나온다.
그냥 동일한 입력값은 동일한 출력값을 내는 함수를 순수함수 라고 알고 있는데 좀더 자세히 알아보고 왜 필요로 하는지 알아보자
순수함수의 정의 와 특징들
- 동일입력값 > 동일출력값
- 함수형 프로그래밍의 기반
- side-effect 가 없다.
- 공유된 상태로부터 기인한 버그에 면역이 있다.
- 바깥상태로부터 독립적이다.
- 리팩토링 하기 쉽다.
특징들은 그러려니 하고 side-effect 와 함수형프로그래밍 은 어떤건지 알아보자
함수형 프로그래밍
일단 프로그래밍 패러다임중 하나다.
예를 들어 객체지향형 프로그래밍 절차적 프로그래밍 같은
근데 이거는 다음글에 따로 정리를 해보자...ㅎㅎㅎ
다시 side-effect 의 정의를 보자
"값을 내는 것 이외에 어떤 상태나 관찰 가능한 상호 작용이 발생하는 것"
>순수함수는 side-effect 가 없다고 했으니까 함수밖과 상호작용 하지 않는다 라고 생각하면 된다.
>한단계 더 구체적으로 들어가면 함수바깥의 상태가 변한다고해서 함수의 작용에 달라지는 점이 없고
그 반대로 함수가 실행된다고 해서 바깥의 상태를 변화시키지도 않는 > 상호작용이 없는 > 사이드 이펙트가 없다.
이러한 특징들은 어떤 장점이 있을까?
좀더 예측가능해지고
독립적 이기 때문에 테스트 하는 범위가 한정적일수 있다. 하나의 함수가 독립적이지 않고 바깥의 상태와 유기적으로 움직인다면 테스트 범위가 넓어지는건 당연하다. > 테스트하기 쉽다.
React 에서의 순수함수
리액트의 컴포넌트는 props 에 대하여 순수함수처럼 동작한다.
props 는 부모에게서 물려 받은 값이고 우리는 이값을 변경하면서 사용하지 않는다.
변경이 필요한 데이터는 state 로 관리한다.
Redux 에서의 순수함수
reducer는 state 를 변화시킬때 수정하지 않는다 state 를 바꿔놓는다. 즉 원본값을 토대로 새로운 값을 넣어놓지 원래 데이터를 수정하지 않는다.
redux 에서 변경을 감지할때 값을 비교하는게 아니라 참조된 주소를 확인하기 때문이다.
왜냐하면 값을 하나하나 비교하는 deep 카피 보다 주소만 비교하는 게 빠르니까
'기타' 카테고리의 다른 글
[redux] 리덕스 타입스크립트랑 같이 써보기 (0) 2021.05.28 [정규표현식]알아보기(2) (0) 2021.05.26 [cs] url 입력시 일어나는 일 (0) 2021.05.18 [정규표현식] 알아보기(1) (0) 2021.05.12 [code & css] noteapp (0) 2021.05.10