본문 바로가기

Languages

(15)
Thread-Safe하지 않은 자바의 SimpleDateFormat Java의 SimpleDateFormat은 절대 Simple하지 않습니다. 멀티 스레드 환경이면 더더욱이요. 다음과 같은 코드를 실행해 봅니다. import java.text.SimpleDateFormat import java.util.Date import scala.concurrent._ import ExecutionContext.Implicits.global val format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") def fmtFuture(dateStr: String): Future[Date] = Future { format.parse(dateStr) } val parseList: Seq[Future[Date]] = (1 to 10).map(i => "20..
[Scala Cats] 펑터 Functors, Higher Kinded Types 펑터란 리스트나 옵션 등과 같은 컨텍스트(혹은 객체)에서 내부의 값에 연산자(함수)를 편하게 적용할 수 있도록 도와주는 컨텍스트입니다. 펑터 그 자체는 그닥 유용하지 않지만, 모나드 및 applicative functor는 Cats에서 가장 보편적으로 사용되는 추상화 계층입니다. Functor를 이해하기 위한 예시 러프하게, 펑터란 map 메소드를 사용할 수 있는 '것'들을 의미합니다. (Option, List, Either 등을 생각하면 됩니다.) 우리는 보통 map 메소드를 Lists 내의 원소에 대한 반복 탐색을 수행할 때 처음 접하게 됩니다. 하지만, 펑터를 이해하기 위해서는 이 메소드를 다른 방법으로 생각해볼 필요가 있습니다. List 내의 원소를 순회하기 위해 사용하는 함수라 생각하지 말고, ..
[Scala Cats] 모노이드와 세미그룹 이번 글에서는 모노이드와 세미그룹에 대해 다룰 예정입니다. 여전히, 레퍼런스는 Scala with Cats [무료 PDF] 입니다. Recap. 모노이드와 세미그룹은 값을 더하거나 합치는데 사용됩니다. 들어가기에 앞서, 몇 가지 기초적인 수학 법칙들에 대해서 짚고 넘어가고자 합니다. 우리는 덧셈과 곱셈 연산에 대해 결합법칙과 교환법칙이 성립하는 것과 덧셈 연산의 항등원은 0, 곱셈 연산의 항등원은 1이라는 사실을 이미 알고 있습니다. 더불어, 문자열의 덧셈 연산은 결합법칙이 성립하며, 항등원을 가지고 있습니다. "One" ++ "Two" // "OneTwo" "Two" ++ "One" // "TwoOne" 교환법칙은 성립하지 않는다. ("One" ++ "Two") ++ "Three" // "OneTwoT..
[Scala Cats] 타입 공변성/반공변성 다루기 지난 글에서는 Cats 라이브러리의 타입 클래스에 대해 다루었습니다. [Scala Cats] Cats의 타입 클래스 지난번 포스트에서 타입 클래스를 스칼라에서 어떻게 구현하는지를 알아보았습니다. [Scala Cats] 스칼라 타입 클래스 기초 귀여운 고양이로 시작합니다. 스칼라 Cats는 스칼라에서의 Functional한 프 sean-ma.tistory.com 타입을 다룰 때 가장 조심해야 할 부분중에 하나가 상/하위 타입을 같이 사용해야 하는 경우입니다. 이번 글에서는 타입 간의 계층 관계에 대해서 다루어 보겠습니다. 레퍼런스는 Scala with Cats [무료 PDF] 입니다. 타입 변성 스칼라에서 타입 간의 계층 관계를 처리할 때, 항상 따라오는 문제 중 하나가 타입의 변성(Type Varianc..
[Scala Cats] Cats의 타입 클래스 지난번 포스트에서 타입 클래스를 스칼라에서 어떻게 구현하는지를 알아보았습니다. [Scala Cats] 스칼라 타입 클래스 기초 귀여운 고양이로 시작합니다. 스칼라 Cats는 스칼라에서의 Functional한 프로그래밍을 위한 추상화를 제공하는 라이브러리입니다. typelevel/cats Lightweight, modular, and extensible library for functional.. sean-ma.tistory.com 이번 글에서는 타입 클래스가 스칼라 Cats 라이브러리에서 어떻게 구현되어 있는지를 알아보겠습니다. 레퍼런스는 Scala with Cats[무료 PDF] 입니다. cats.Show Cats는 어떤 클래스, 인스턴스 혹은 인터페이스 메소드를 사용할건지 정할 수 있도록 모듈화된 구..
[Scala Cats] 스칼라 타입 클래스 기초 귀여운 고양이로 시작합니다. 스칼라 Cats는 스칼라에서의 Functional한 프로그래밍을 위한 추상화를 제공하는 라이브러리입니다. typelevel/cats Lightweight, modular, and extensible library for functional programming. - typelevel/cats github.com 참고문헌은 Scala with cats [무료 pdf] 이며, 거의 번역 위주의 글이 될 것 같습니다. Scala with Cats 책 순서를 따라서 포스팅을 진행할 예정이며, 예제들은 책 내용을 참고하여 직접 작성한 내용들로 사용할 예정입니다. 들어가기 전에, 모나드 괴담을 읽고 오시는 것을 추천드립니다. 모나드 괴담 xtendo.org 또 하나의 모나드 튜토리얼이 ..
Scala-99-Problems 솔루션 : P14 ~ P18 이전 포스팅과 같이 연관성 있는 문제가 아니라면 추후 포스팅부터는 5문제씩 끊어서 솔루션을 달 예정입니다 :) 시작할게요! P14. 리스트의 원소들을 복제하는 함수를 작성하시오. P14. Duplicate the elements of a list. 이 문제도 Head -> Tail로 이동하며 head를 두번씩 append하여 재귀적인 방법으로 쉽게 해결할 수 있습니다. 소스 코드는 다음과 같습니다 : def duplicate[T](list: List[T]): List[T] = list match { case Nil => Nil case head :: tail => head :: head :: duplicate(tail) } P15. 리스트의 원소들을 주어진 숫자만큼 복제하는 함수를 작성하시오. P15. ..
Scala-99-Problems 솔루션 : P08 ~ P13 이번 글에서는 리스트 내 중복 및 Run-length encoding에 대한 문제인 P08 ~ P13 에 대한 솔루션을 포스팅하고자 합니다. 마찬가지로 리스트의 head::tail 특성을 활용하여 재귀적으로 작성하였습니다. P08. 리스트 내에 연속하여 중복된 원소들을 제거하는 함수를 작성하시오. 만약 리스트가 반복되는 원소를 가지고 있다면 단일 원소로 대체되어야 하며, 원소들의 순서는 변경되어서는 안된다. P08. Eliminate consecutive duplicates of list elements. If a list contains repeated elements they should be replaced with a single copy of the element. The order of the..