-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
series/monad-and-functional-architecture-part-3/ #6
Comments
정말 좋은 글이에요 닫혔던 눈 하나가 뜬 것 같아요. |
@rjcnd105 힘이 되는 말씀 주셔서 감사합니다! 😊 |
모나드는 마치 외부 변수에 의해 side-effect가 되는 것을 모두 명시적으로 인자로 넘겨주어서 side-effect가 되지 않게 만드는 것 같네요. Optional은 "파일이 있는지 없는지 여부"라는 변수를 인자로 넘겨주어서 side-effect가 되지 않고 하스켈의 Monad IO는 "외부 입출력 모듈"자체를 변수로 넘겨주는 꼴이 되어서 side-effect가 되지 않는 거네요 |
@kim3339 안녕하세요. 댓글 주셔서 감사합니다 😊 순수함수로 이루어진 수학의 함수 합성처럼 모나드는 사이드 이펙트가 반드시 필요한 컴퓨터 프로그래밍의 함수를 수학의 순수 함수처럼 합성 가능토록 해 주는 타입입니다. 사이드 이펙트를 관리하며 합성을 통한 확장 또는 흐름을 만들기 위해서 map 과 flatMap을 제공하는 타입입니다. 참고로 수학 함수와 프로그래밍 함수의 가장 큰 차이는 사이드 이펙트입니다. 예를 들어, 수학 함수는 데이터를 정의하면 됩니다. x + 1 함수 연산을 위해서 조건제시법으로 데이터를 제공할 수 있습니다.
하지만 컴퓨터 프로그래밍의 함수는 다릅니다. 데이터가 로컬 변수에 정의될 수 있지만 그렇지 않고 파일에 있거나 네트워크 요청 응답으로 받아야 하거나 등의 데이터 제공을 위한 작업이 필요합니다.
2장. 프로그래밍 패러다임에서 컴퓨터 프로그램을 아주 작은 함수로 나누더라도 모든 함수를 순수함수로 나타낼 수 없습니다. 순수함수로 나타낼 수 있는 부분이 오히려 적습니다. 반드시 사이드 이펙트(예: 입,출력)을 사용하는 부분이 있게 마련입니다. 예를 들어 데이터를 준비, 화면에 출력, 파일에 저장, 종이에 출력, 원격 서버에 저장, DB에 읽기, 쓰기 등의 작업이 컴퓨터 프로그램에서는 반드시 필요하게 되죠. 수학의 함수 합성처럼 함수형 프로그래밍에서는 컴퓨터 프로그램을 함수 합성으로 추상화 하는데 사이드 이펙트를 지닌 함수는 그 자체로는 순수 함수가 아니기에 함수 합성에 참여할 수 없으므로 모나드 타입을 적용하여 합수 합성에 참여할 수 있도록 해 줍니다. |
모나드와 함수형 아키텍처 3장. 모나드 - Burt.K
https://blog.burt.pe.kr/series/monad-and-functional-architecture-part-3/
The text was updated successfully, but these errors were encountered: