항해99/항해99 storage

순수함수란 무엇인가요? 불변성과 사이드 이펙트와 연결하여설명해주세요.

crab. 2023. 5. 17. 11:32

글의 목적

면접을 대비해 대답을 정리한다.

레퍼런스

기술 면접 part 2.

순수함수란 무엇인가요? 불변성과 사이드 이펙트와 연결하여설명해주세요.

본문

순수함수란?

동일한 인자에 대해서는 항상 동일한 값을 리턴하고 함수 외부에 어떠한 영향도 미치지 않는 함수를 말한다.

사이드 이펙트란?

함수에서 값을 반환하는 일 외에 함수 외부와 상호작용하여 부가적인 작업을 수행할때 그 함수는 사이드 이펙트가 있다고 한다.

사이드 이펙트 예

  • Ajax, setTimeout, console.log 등 호출이 모두 사이드 이펙트이다.
  • 함수 내부를 벗어나 외부와 상호 작용을 하기때문이다.
  • Ajax, setTimeout 같은 함수들은 브라우저 API를 사용하는 일이고, console.log는 브라우저의 콘솔창에 문자열을 출력하는 함수이다.

불변성이란?

  • 객체나 배열등의 데이터 구조를 생성한 후 그 데이터 구조를 변경 할 수 없는것
  • 기본 객체가 불변!!
  • 자바스크립트 불변성
  • 기본데이터타입 (primitive type)인 숫자, 문자열,불리언, null, undefined와 같은 값들은 불변값으로 취급한다. 이들은 생성된 이후에 변경될 수 없다.

순수함수를 불변성과 사이드 이펙트와 연결하여 설명하면

순수함수는 함수형 프로그래밍에서 자주 사용되는 개념으로, 오직 함수의 입력만이 함수의 결과에 영향을 주는 함수를 의미합니다.

 

또한 사이드 이펙트가 없어야 합니다.

 

사이드 이펙트는 쉽게 말해서 외부 변수를 참조하거나, 변경하는 모든 종류의 코드를 의미합니다.

 

즉, 순수함수는 함수 body내에 있는 코드만 점검하면 되기 때문에 간결하게 코드를 작성하고 사고하는데 도움이 됩니다.

 

자바스크립트에서 순수함수를 제작하기 위해서 데이터의 불변성을 유지하는 것이 중요합니다.

 

함수의 전달인자로 참조 자료형이 전달되는 경우, 해당 객체 자체를 바꿔서 사이드 이펙트를 만들 수 있고, 이는 해당 데이터의 불변성을 손상시킬 수 있습니다.

 

그래서 배열의 불변성을 보장하는 메서드인 map, filter, reduce 등이 각광을 받게 되었습니다.