-
Monad Transformer In Scala
안녕하세요~ 오늘은 Monad Transformer 에 대해서 포스팅해보려고 합니다 ㅎㅎ » 이 글을 좀 더 좋은 가독성으로 읽기 « Monad Transformer 란? 자, 다음과 같이 간단한 코드가 있습니다. case class User(id: String, bestFriendId: String) def getUser(userId: String): Future[Option[User]] = ??? def getBestFriendOfUser(userId: String): Future[Option[User]] = for { userOpt <- getUser(userId) bestFriendIdOpt = userOpt.map(_.bestFriendId) bestFriendOpt <- bestFriendIdOpt match { case Some(bestFriendId) => getUser(bestFriendId) case None => Future.successful(None) } } yield bestFriendOpt getBestFriendOfUser 함수를 보면 Future 와 Option...
-
꼬리 재귀와 Trampoline In Scala
안녕하세요! 오늘은 스칼라 초심자를 대상으로 Tail Recursion (꼬리 재귀) 와 Trampoline 에 대해 포스팅하려고 합니다. 함수형 프로그래밍이나 모나드를 몰라도 이해할 수 있도록 노력해봤습니다~~ » 이 글을 좀 더 좋은 가독성으로 읽기 « 간단하게 1부터 n 까지 더해주는 함수를 아래와 같이 작성한 뒤 실행 해봅시다. 스택오버플로우 에러가 뜨는 것을 확인할 수 있습니다. def unsafeSum(n: Int): Int = if (n == 1) 1 else n + unsafeSum(n - 1) println(s"sum = ${unsafeSum(100000)}") // 실행결과 // Exception in...
-
Akka typed 소개
안녕하세요~ 오늘은 akka 의 새로운 인터페이스 (API) 인 akka typed 에 대해서 소개시켜드리는 시간을 가져볼까 합니다! Akka 및 액터 모델에 대한 기본적인 내용은 이미 알고 있다고 가정하며 scala 를 기반으로 설명하겠습니다. » 이 글을 좀 더 좋은 가독성으로 읽기 « 기존 akka 에서의 문제점 akka 는 훌륭한 프레임워크이지만 인터페이스 (API) 상으로 아쉬운 부분들이 있습니다. class EchoStringActor extends Actor { def receive = { case str: String => sender() ! str case _ => sender() !...
-
Purely Functional Business Logic In Scala
안녕하세요~ 오늘은 스칼라에서 비지니스 로직을 purely functional 하게 설계하는 방법에 대해서 소개해볼까 합니다. 함수형 프로그래밍, 스칼라, cats, DDD 에 대해서 알고 계시면 이해가 수월하시겠지만 모르시는 분들을 위해서 기본적인 설명도 같이 첨부해두었습니다. » 이 글을 좀 더 좋은 가독성으로 읽기 « 다루는 내용 cats 의 RWST (ReaderWriterStateT) 를 활용해서 핵심 비지니스 로직을 purely functional 하게 작성하는 방법 그렇게 작성된 비지니스 로직을 DDD (Domain Driven Development) 설계에서 사용하는 방법 비지니스 로직에 대한 고찰 소프트웨어 설계와 개발에 있어서...