Just Do IT!

[JavaScript] 순수 함수, side Effect 본문

개발 공부/JavaScript

[JavaScript] 순수 함수, side Effect

MOON달 2023. 4. 5. 13:27
728x90

순수함수 (pure function)

  • 입력값에 대해 항상 동일한 출력값을 반환하며, 함수 외부에 영향을 끼치는 부작용(side effect)이 없는 함수
  • 함수의 실행 결과는 오직 입력 값에만 의존하며, 외부의 상태(state)를 변경하지 않는다
  • 불변성(immutability)을 보장한다
    • 불변성 : 데이터나 상태가 변경되지 않는 것을 의미하며, 함수형 프로그래밍에서는 데이터를 변경하는 대신 새로운 데이터를 생성하는 방식을 취한다
  • 순수 함수를 사용하면 상태 변경이 없기 때문에 프로그램의 안정성이 높아지고, 디버깅이 쉬워진다

반면 순수 함수가 아닌 함수는 부작용이 발생할 수 있다

 

 

 

 

 

 

 

side effect

  • 함수의 실행 결과가 입력값 이외의 외부 상태를 변경하는 것
  • 부작용은 예측하기 어렵기 때문에 코드를 이해하고 디버깅하기가 어렵고, 프로그램 전체적인 안정성을 낮추는 요소가 될 수 있다
  • 함수 내부에서 Ajax, setTimeout, console.log 등의 호출이 모두 사이드 이펙트이다.
    • 함수 내부를 벗어나 외부와 상호작용하기 때문이다.
    • Ajax나 setTimeout과 같은 함수들은 브라우저 API를 사용하는 일이고, console.log는 브라우저의 콘솔창에 문자열을 출력하는 함수이다

 

따라서 순수 함수를 사용하면 함수형 프로그래밍에서 불변성을 보장하며, 부작용을 최소화하고 안정적인 코드를 작성할 수 있다

 

 

 

 

 

 

 

순수 함수를 사용해야 하는 이유

  1. 가독성이 좋다
    • 순수함수는 컨텍스트와 관계없이 동작하기 때문에 가독성이 좋다. 단지 필요한 값들을 매개변수로 받을 뿐이며, 어플리케이션의 상태를 필요로하지 않는다.
    • 사이드 이펙트는 동일한 인풋임에도 불구하고 상황에 따라 결과가 달라질 수 있기 때문에 이게 왜 이런 결과가 만들어졌는지 이곳 저곳을 살펴야 알 수 있어 코드를 읽게 힘들게 만든다.
  2. 테스트 하기 좋다
    • 순수함수는 같은 인풋엔 같은 결과가 나오기 때문에 단위 테스트를 작성하기가 다른 함수에 비해 간편하다.
  3. 모듈화와 재사용성
    • 어플리케이션의 다른 부분을 전혀 사용하지 않고 변경하지도 않으며, 오직 매개변수에만 의존하여 동작하기 떄문에 아주 응집도가 높다고 할 수 있다.