회사에서 자바로 코딩할때 "어 뭐야 이거 이렇게 하면 원래 값이 변경되던가?" 하게 됨.


예를 들면


배열을 스코프 A에서 선언하고


배열을 스코프 B안으로 집어넣고 (다른 객체의 프로퍼티로 집어넣는다던지)


다시 스코프 A에 있는 배열 변수를 통해서 배열에 접근해서 배열을 변경할때



어... 이게 뭐지 싶음...



하스켈을 배운 이유는 다양하지만, 다른 언어를 사용함에 있어서 함수형 언어의 장점이 되는 스타일을 살리기 위함이 있었는데


불변이라는 성질을 채택하는게 장점인가?? 를 아직 잘 모르겠음.


솔직히 우리 회사에서 동시적인 상황을 고려할 일도 별로 없거니와, 아직 불변이나 부작용이 없다는 것의 장점을 크게 못느끼는중.



물론, 하스켈에 익숙해지고나니까 자바 코드가 이상하게 보일정도로, 불변은 디버깅하기에 용이한것 같음.




근데, 1. 모나드 없이 불변, no부작용이 가능한가. 자바로 모나드까지 쓸 수는 없는 노릇이다.

2. 자바로 모나드를 쓸 수 없다면, 불변이라는 성질을 채택하는것이 깔끔한 코드인가 아니면 자바는 자바스타일대로 코드하는것이 맞는것인가

3. 하스켈적인 철학을 자바에 가져다쓰는 관점 이외에, 순수 자바와 순수 하스켈간에 어떤 코드가 더 나은 코드라고 말할 수 있는가,

   그 둘의 장점을 섞을 순 없는가. => (스칼라가 그래서 내 함수형공부의 마지막 언어이기도 함. 하스켈, ML, 리습, 스칼라 순서로 함수형공부함.





여담으로, 어제

StateT 에서 get 이 모나드 환경에서 바인드된 state 값을 가져와서 <- 로 나타내게 해주고,

put이 모나드 환경에서 바인드된 state 값을 재설정해서 다음번의 get 이나 modify 가 이용할 수 있게 해준다는

메카니즘을 완벽히 이해해서 기분이 좋음.





한줄 요약:

지금 내가 공부하는 책이 하스켈로 코드를 구현하고 수학적인 기틀을 마련하는데에는 큰 도움을 주지만, 가장 근본적으로, 하스켈을 왜 쓰는가, 이런 코딩스타일의 장점은 뭐고 해당 장점이 돋보이는 코드는 무엇인가! 를 설명하지 못하고있어서 아쉬움 ㅠㅠ