하지만 그냥 js함수 같은 부분 mutable로 짜오면서 굳이 왜 써야 되냐는 질문이 머릿속에 빠지지가 않았다. 여기서는 그냥 디버깅 툴로 다 추적할 수 있지 않나?
내가 내린 결론은 프로그래머가 코드 블럭을 멈추면서 보는 그런 디버깅이 아닌 것 같다. ex) 브라우저의 뒤로가기, 실행 및 ui의 관점에서
+ 뒤에 코멧님이 답변해주신 일일이 체크해야 되는 부분 참조만으로 변경을 감지할 수 있게 해줄 수 있다.
* 함수형 프로그래밍에서의 지향점
순수함수 불변성 Redux, React ShouldComponent Update, Setstate ... 등등, immutable을 통해서 데이터 변경 및 흐름을 파악한다.
* 성능에 대한 질문은
알아본 바로 아직 정확하지는 않지만, 최적화 및 기억을 통해서 거의 차이가 없다. +_+
처음엔 immutable이 더 빠른지 알았다. 더 빠를수도 있고 아니고?.? 이 부분은 조금 더 알아봐야 될 듯 하다. 데이터에 따라서 다르다? 어찌되었든 성능에는 거의 차이가 없다고 하면 이 패러다임에서 성능은 주안점이 아니다.
데이터추적, 변경인지용이, 함수형
Simplified data flow through apps. Removed requirement for defensive copying of data. Optimisation through data change detection. Performance enhancement through memoization
Commet님의 답변
불변객체를 이용하는 이유라고하면 주로 "상태 변경" 에 대한 얘기일 것 같습니다. 상태가 Mutable 하다면 어쩔 수 없이 상태 변경을 매번 추적하기 위해 이 상태를 "깊게" 비교해야하는데, 데이터가 불변함을 보장한다면 간단히 참조 정도만 비교하고 넘어갈 수 있으니까요. 여기서 불변이라함은 어떤 참조가 가르키는 메모리의 구조가 절대 바뀌지 않는 걸 보장하는 것입니다.
동등(equals)한 값에 대해 항상 같은 참조가 제공되도록 하는데 이걸 구현하는 가장 쉬운방법이 "변경하지 않고 복사해서 쓰기" 입니다.
물론 Immutable 라이브러리는 단순히 복사만 하진 않습니다만, 그렇다고해도 성능외적인 장점(참조에 대한 신뢰, 레이스컨디션 회피 등)은 가져갈 수 있죠