더북(TheBook)

클로저를 과하게 사용하고 싶지 않겠지만, 자바스크립트에서 함수들은 클로저를 선언된 곳 주변에 만듭니다. 이런 함수들이 중첩된다는 것은 인수로서 전달된 변수의 상태뿐만 아니라 각 함수 선언을 둘러싼 모든 외부 변수의 상태도 고려해야 한다는 것을 의미하며, 이로 인해 부가 작용도 발생하게 됩니다. 다음 장에서 부가 작용이 얼마나 해로운지와 이 문제를 FP로 어떻게 처리하는지를 살펴봅니다. 부가 작용은 애플리케이션의 인지 부하를 높여 프로그램 상태 추적을 사실상 불가능하게 합니다. 이런 상황에서 몇 개의 반복문과 if-else 같은 조건문을 혼합하여 구성한다면 기능에 영향을 주는 버그가 발생하게 됩니다.

이벤트 또는 장기 실행 작업이 멋대로 작동하거나 취소해야 할 상황임을 감지하기는 어렵습니다. 처리하는 데 시간이 너무 오래 걸리는 원격 HTTP 요청을 생각해 보죠. 스크립트가 응답하지 않거나 서버가 느린 걸까요? 미리 정한 시간이 지나면 이벤트를 깨끗이 취소할 수 있는 메커니즘을 두는 것이 좋습니다. 하지만 자체 취소 메커니즘을 구현하는 작업은 서드 파티 라이브러리의 도움을 받아도 매우 어려울 수 있으며 에러가 발생하기도 쉽습니다.

제대로 만든 반응형 디자인은 항상 사용자와 UI 컴포넌트의 상호 작용을 적절히 조절하여 시스템이 불필요하게 과부하되지 않습니다. 이와 관련하여 4장에서 스로틀링(throttling)디바운싱(debouncing)을 사용하는 방법을 알아봅니다. 수동으로 제한을 가하는 방식은 일반적으로 작동이 제대로 이루어지지 않고, 지역 범위를 벗어나는 데이터에 접근하는 함수들을 포함하고 있어 전반적으로 프로그램 안정성이 저하됩니다.

자바스크립트 애플리케이션, 특히 클라이언트 측 코드에서 메모리 관리를 걱정하지 않아도 됩니다. 결국 브라우저가 이러한 저수준의 세부 사항 대부분을 처리합니다. 하지만 UI가 점점 커지고 풍부해짐에 따라 남아 있는 이벤트 리스너들이 메모리 누수를 일으키고 브라우저 프로세스의 크기가 커지게 됩니다. 오래된 브라우저에는 이러한 현상이 이미 만연해 있습니다. 그럼에도 불구하고 오늘날의 자바스크립트 애플리케이션의 복잡성은 이전 애플리케이션과는 비교가 되지 않을 정도로 복잡합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.