Software Development/Scala
-
[FP In Scala] 지역 효과와 변이 가능 상태Software Development/Scala 2021. 6. 16. 13:21
참조 투명성 개념을 다룬다. 효과가 한 표현식 안에서 지역적으로 발생할 수 있다는, 그리고 그런 효과가 발생했음을 더 큰 프로그램의 다른 부분이 전혀 관측하지 못함을 보장할 수 있다는 착안을 살펴본다. 1. 순수 함수적 변이 가능 상태 순수 함수형 프로그래밍에서 mutable 상태를 사용할 수 없을 것 같지만 그렇지 않다. 참조 투명성과 순수성의 정의를 자세히 보면 지역(local) 상태의 변이를 금지하는 사항은 전혀 없음을 알 수 있다. 참조 투명성과 순수성의 정의를 다시 살펴보면.. 참조 투명성과 순수성의 정의 만일 모든 프로그램 p에 대해 표현식 e의 모든 출현을 e의 평가 결과로 치환해도 p의 의미에 아무런 영향을 미치지 않는다면, 그 표현식 e는 참조에 투명하다. 표현식을 해당 표현식의 평가(e..
-
[FP In Scala] 외부 효과와 입출력Software Development/Scala 2021. 6. 6. 19:33
모나드와 대수적 자료 형식으로 데이터베이스 조회나 파일 기록 같은 외부 효과를 처리하는 방법에 대해 알아본다. 핵심은 효과와 부수 효과의 구분이다. IO 모나드는 I/O효과를 수반한 명령식 프로그램을 참조 투명성(함수 외부의 영향을 받지 않는 것)을 어기지 않고 순수 함수적 프로그램에 내장하는 방법을 제공한다. 이 모나드는 효과 있는(effectful) 코드, 즉 외부 세계에 일정한 영향을 미쳐야 하는 코드를 프로그램의 나머지 부분과 명확히 분리한다. 또한 효과 있는 계산의 서술(description)을 순수 함수를 이용해서 계산하고, 그 서술을 개별적인 해석기를 이용해서 실행함으로써 실제로 효과를 수행한다는 것. 이는 명령식 프로그래밍을 위한 내장 영역 국한 언어(embedded domain-speci..
-
[FP In Scala] 모나드Software Development/Scala 2021. 5. 23. 15:53
모노이드: 완전히 추상적이고 순수한 대수적인(결합법칙 + 항등법칙) 인터페이스 -> 다형적 함수 작성 가능 -> 문제를 여러 조각으로 나눠 병렬 계산 용이 -> 복잡한 계산 생성 가능 모노이드와 비슷한 사고방식을 이어나가며 중복된 코드를 추출하는 문제에 적용해 그 과정에서 새로운 추상 인터페이스 Functor와 Monad를 알아본다. 1. Functor: map 함수의 일반화 Gen 형식, Parser 형식, Option 형식에 대한 map 함수의 서명 def map[A,B](ga: Gen[A])(f: A => B): Gen[B] def map[A,B](pa: Parser[A])(f: A => B): Parser[B] def map[A,B](oa: Option[A])(f: A => B): Option[B..
-
[FP In Scala] 순수 함수적 병렬성Software Development/Scala 2021. 5. 2. 15:52
병렬 및 비동기 계산의 생성을 위한 순수 함수적 라이브러리 하나를 구축한다. 병렬적 프로그램에 내재하는 복잡성을, 오직 순수 함수만으로 프로그램을 서술함으로써 통제해 볼 것이다. 이를 통해 치환 모형을 이용해서 추론을 단순화할 수 있으며, 그러다 보면 바라건대 동시적 계산을 쉽고 즐겁게 다룰 수 있게 될 것이다. 순수 함수적 병렬성을 위한 라이브러리의 작성 방법. 순수 함수적 라이브러리의 설계 문제에 대한 접근방식. 주제: 계산의 서술이라는 관심사 -> 계산의 실제 실행이라는 관심사와 분리 프로그램의 구체적인 실행 방식에 관한 세부사항과는 격리된 수준에서 프로그램을 작성할 수 있어야 한다. parMap이라는 조합기를 개발할 것인데, 이를 이용하면 함수 f를 한 컬렉션의 모든 요소에 동시에 적용할 수 있다..
-
[FP In Scala] 함수적 자료구조Software Development/Scala 2021. 4. 11. 18:39
함수적 프로그램은 변수를 갱신하거나 mutable(변이 가능)한 자료구조를 수정하는 일이 없다. 함수형 프로그래밍에서 사용할 수 있는 자료구조는 어떤 것일까? 함수적 자료구조가 무엇이고 그것을 다루는 방법에 대해 알아보자. 이를 통해 함수형 프로그래밍에서 자료구조를 정의하는 방법을 소개하고 관련 기법인 패턴 부합도 설명한다. 1. 함수적 자료구조의 정의 함수적 자료구조: 오직 순수 함수만으로 조작되는 자료구조 순수 함수: 자료를 변경하거나 부수 효과를 수행하는 일이 없어야 한다. 함수적 자료구조는 정의에 의해 불변이(immutable). ex) 빈 목록(List()나 Nil), 정수 3이나 4 3 + 4를 평가하면 3이나 4가 수정되는 일이 없다. 마찬가지로 두 목록을 연결하면 목록은 변하지 않고 새로운..