Programming/Scala 3

case class (케이스 클래스)

스칼라에서는 case class라는 클래스를 제공합니다. case class는 클래스와 유사하지만 약간의 차이가 존재합니다. 기본적으로 불변이며 불변 데이터를 모델링하기에 좋습니다. 또한 개발자들이 이러한 모델링을 위해 작성해야 하는 보일러플레이트 코드(boilerplate code)를 제공해줍니다. 그럼 예제를 통해 살펴보겠습니다. case class Book(id: Int, title: String, isbn: Long) case class는 위와 같이 class 선언시 앞에 case라는 키워드를 붙여서 생성합니다. 그럼 위와 같이 생성을 하게 되면 어떤 코드가 나오는지 살펴보겠습니다. 위의 case class를 scalac로 컴파일한 후 javap 커맨드를 이용해서 디컴파일을 하면 아래의 코드를 확..

Programming/Scala 2019.11.17

스칼라 퓨처(Future)와 동시성(Concurrency) - 2

이전 포스트에 이어서 스칼라 Future의 다른 사용법에 대해 살펴보도록 하겠습니다. Future 실패 처리하기 스칼라 Future는 실패한 퓨처를 다룰 수 있는 failed, fallBackTo, recover, recoverWith 메소드를 제공합니다. failed Future[T]에서 실패한 Future를 예외를 저장한 Future[Throwable] 타입의 성공한 Future로 바꿔줍니다. scala> val failure = Future { 42 / 0 } failure: scala.concurrent.Future[Int] = ... scala> failure.value res23: Option[scala.util.Try[Int]] = Some(Failure(java.lang.Arithmetic..

Programming/Scala 2019.08.17

스칼라 퓨처(Future)와 동시성(Concurrency) - 1

오늘 멀티 코어 프로세서가 대중화되면서 동시성에 대한 관심도 많이 늘어났습니다. 이러한 동시성 프로그래밍을 위해서 기존의 프로그래밍 언어들을 블로킹을 사용하여 동기화함으로써 동시성을 지원합니다. 자바의 경우도 마찬가지로 공유 메모리와 락을 기반으로 동시성을 지원하고 있습니다. 그러나 이러한 블로킹을 사용한 동기화의 경우 Deadlock이나 Starvation과 같은 문제가 발생할 수 있습니다. 이렇게 블로킹 기반의 동시성 처리는 이러한 어려움이 있습니다. 그래서 비동기적 프로그래밍을 사용하면 이러한 블로킹을 없앨 수 있습니다. 비동기적(asynchronous) 프로그래밍이란 아래의 그림과 같이 메인 프로그램의 흐름이 있고 이와 독립적으로 실행되는 프로그래밍 스타일을 의미합니다. 스칼라에서는 이러한 비동기..

Programming/Scala 2019.08.16
반응형