본문 바로가기

Languages/Scala

(10)
[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 또 하나의 모나드 튜토리얼이 ..
[스칼라] 함수 - 기초 스칼라에서는 '재활용 가능한 이름을 가진 표현식'을 함수라 칭하며, 이 표현식의 마지막줄이 반환값이 됩니다. 함수형 프로그래밍에서 함수란 '일급 객체 First-class object'이며, 이는 다른 객체들에 일반적으로 적용 가능한 연산(매개변수화, 수정, 변수에 할당 등)을 지원하는 객체를 의미합니다. 위키피디아의 일급 객체 정의 : https://ko.wikipedia.org/wiki/%EC%9D%BC%EA%B8%89_%EA%B0%9D%EC%B2%B4 일급 객체 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 컴퓨터 프로그래밍 언어 디자인에서, 일급 객체(영어: first-class object)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보..
[스칼라] 반복문 꾸준히 포스트를 작성한다는게 차일피일 미뤄두다 이제 하나씩 정리합니다..^^ 매치 표현식을 사용한 흐름제어에 이어 이번 글에서는 반복문에 대해서 다루어 보려고 합니다. 다른 프로그래밍 언어에서도 보편적으로 쓰이는 반복문은 스칼라에서도 비슷한 형태를 가지고 있습니다. 자바 8버전부터 사용 가능한 for-comprehension과 동일한 모양을 가지고 있으며, Range 컬렉션을 사용하여 반복 횟수를, yield 키워드를 사용하여 루프를 결과 컬렉션을 반환하는 표현식으로 전환할 수도 있습니다. 전통적인 while문 역시 지원하나, 스칼라에서는 while문은 결과 컬렉션을 반환하는 표현식으로 사용할 수 없기 때문에 while문보다 for-comprehension의 사용도가 조금 더 높은 것 같습니다. 반복문을..
[스칼라] 매치 표현식 스칼라에서도 전통적인 if-else 문을 지원하나, 더 간결하고 표현력이 좋으며 확장성이 높은 매치 표현식 match expressions 사용을 선호합니다. 자바의 switch-case 문과 비슷하게 동작하나, 0개 또는 단 하나의 패턴만 매칭할 수 있습니다. //매치 표현식 표현식 match { case 패턴매치 => 표현식 case _ => 표현식//catch-all 패턴 } 와일드 카드를 사용하여 매치 표현식에서 catch-all 패턴을 사용할 수 있으며, 단 하나의 패턴만 매칭할 수 있어 자바처럼 여러 개의 패턴을 한 번에 매칭하는 형태로는 사용할 수 없습니다. 따라서 중간에 빠져 나오는 break문이 존재하지 않습니다. 매치 표현식에서는 값 바인딩을 사용하여 매치 표현식의 입력 패턴을 바인딩하..