본문 바로가기

면접준비

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

순수함수
입력에 대한 출력이 항상 동일하다: 같은 인자를 전달할 경우, 항상 동일한 결과 값을 반환합니다.
사이드 이펙트가 없다: 함수가 받은 인자 외부에 존재하는 데이터를 변경하지 않고, 함수를 실행하는 동안 발생한 변경이 전역적인 상태에 영향을 주지 않습니다.

 

불변성 (Immutability) 
불변성은 데이터가 한 번 생성되면 수정할 수 없는 특성을 말합니다. React에서 불변성을 유지하는 것은 중요한 이유는 상태 변경을 감지하고 최적화된 렌더링을 위해 반영할 때 도움이 됩니다. 불변성을 유지하면 얕은 비교를 통해 쉽게 데이터 변경을 감지할 수 있기 때문입니다. 불변성을 지키기 위해 주로 spread 연산자, Object.assign, 배열의 concat, 배열의 slice, 문자열의 slice 등을 사용합니다.

사이드 이펙트 (Side Effects) 
React에서 사이드 이펙트란, 어플리케이션의 본질적인 상태(Render에 필요한 상태) 외의 것들을 일컫습니다. 예를 들면, API 요청, 타이머 설정, 로컬 스토리지 작업, DOM 조작 등이 있습니다. 이러한 사이드 이펙트는 React의 생명주기 메서드나, 최근에는 Hooks API(useEffect)를 사용하여 수행하는 것이 일반적입니다. useEffect를 사용하면 컴포넌트가 마운트, 업데이트, 언마운트 될 때 실행되는 함수를 정의하여 관리할 수 있습니다. 이를 통해 사이드 이펙트를 분명하게 관리하고 최적화할 수 있습니다.


불변성은 데이터 구조를 변경하지 않고 새로운 데이터 구조를 생성하여 사용하는 것을 의미합니다. 이를 통해 프로그램이 예상치 못한 상태 변화에 안전하게 대응할 수 있도록 합니다. 사이드 이펙트는 함수의 결과 값 외에도 프로그램의 전역 상태에 영향을 주는 것으로, 외부 시스템에 접근하거나 전역 변수를 변경하는 것이 대표적인 사례입니다. 순수함수는 사이드 이펙트가 없기 때문에 프로그램이 결정적(deterministic)이며 예측가능하고 안전한 상태를 유지할 수 있습니다.


질문: 순수함수의 장점은 무엇인가요?
답변: 순수함수는 예측 가능성, 테스트 용이성, 모듈화 및 코드 재사용성이라는 장점을 가집니다. 이는 프로그램의 안정성과 유지 관리가 용이하게 만듭니다.

질문: 순수함수를 사용하면 성능에 문제가 생길 수 있나요?
답변: 순수함수 사용으로 인해 메모리 사용량이 증가하거나 성능 저하가 발생할 수 있습니다. 그러나 이러한 문제는 메모제이션 등의 기법으로 최적화가 가능합니다.

질문: 함수형 프로그래밍이 무엇인가요? 순수함수와의 연관성을 설명해 주세요.
답변: 함수형 프로그래밍은 순수함수와 불변성을 중심으로 한 프로그래밍 패러다임입니다. 여기서 순수함수는 프로그램의 로직을 명확하게 표현하고, 재사용이 가능하며 사이드 이펙트를 최소화합니다.

질문: 불변성을 지키는 경우 어떤 장점이 있나요?
답변: 불변성을 지키면 상태 변화에 의한 버그를 감소시킬 수 있으며, 시간에 관계없는 안정적인 데이터를 사용할 수 있어 디버깅이 용이하고 코드가 더욱 명확해집니다.

질문: 사이드 이펙트가 없는 프로그램은 가능한가요?
답변: 완벽한 사이드 이펙트 없는 프로그램은 가능하지 않습니다. 하지만 프로그램 내에서 순수함수를 이용하고 사이드 이펙트를 최소화하면 코드의 가독성과 안정성을 높일 수 있습니다.