Scala 학습에 도움이 되는 참고 자료를 정리합니다. 공식 문서부터 서적, 온라인 강의, 커뮤니티까지 다양한 리소스를 카테고리별로 분류했습니다.

TL;DR - 핵심 추천
  • 공식 문서: Scala 3 Book - 단계별 학습서
  • 입문서: “Scala for the Impatient” - 빠른 학습에 최적
  • 함수형 심화: “Scala with Cats” (무료 온라인) - 타입 클래스 마스터
  • 온라인 실습: Scastie - 브라우저에서 즉시 실행
  • 커뮤니티: Scala Discord - 실시간 질의응답

공식 문서#

Scala 공식 사이트와 문서는 가장 정확하고 최신의 정보를 제공합니다.

Scala 공식

학습 자료

공식적으로 제공되는 학습 자료들입니다.

빌드 도구

Scala 프로젝트에서 사용하는 빌드 도구들의 공식 문서입니다.

핵심 포인트
  • 시작점: Tour of Scala로 핵심 기능 빠르게 파악
  • Scala 3: 새 프로젝트라면 Scala 3 Book으로 학습
  • 빌드: sbt가 표준, Mill은 빠른 대안

서적#

Scala 학습에 도움이 되는 서적들을 난이도별로 분류했습니다.

입문서

Scala를 처음 배우는 분께 추천하는 서적입니다.

  • “Programming in Scala” (4th Edition)

    • 저자: Martin Odersky, Lex Spoon, Bill Venners
    • Scala 창시자가 쓴 권위 있는 책
  • “Scala for the Impatient” (3rd Edition)

    • 저자: Cay S. Horstmann
    • 빠르게 Scala를 배우고 싶은 분께 추천

함수형 프로그래밍

함수형 프로그래밍 개념과 패턴을 깊이 있게 다루는 서적입니다.

  • “Functional Programming in Scala” (2nd Edition)

    • 저자: Michael Pilquist, Rúnar Bjarnason, Paul Chiusano
    • “레드북"으로 유명, FP 심화 학습
  • “Essential Scala”

고급

타입 클래스, 효과 시스템 등 고급 주제를 다루는 서적입니다.

  • “Scala with Cats”

  • “Practical FP in Scala”

    • 저자: Gabriel Volpe
    • 실무 함수형 프로그래밍
핵심 포인트
  • 입문: “Scala for the Impatient” (빠른 학습) 또는 “Programming in Scala” (깊이 있는 학습)
  • 무료: “Essential Scala”, “Scala with Cats” 온라인 제공
  • 함수형 심화: “Functional Programming in Scala” (레드북)

실무 라이브러리 맛보기#

이 가이드에서 배운 개념이 실무 라이브러리에서 어떻게 활용되는지 간단히 소개합니다.

Cats: 타입 클래스 실전 활용

Type Classes에서 배운 패턴이 Cats에서 실제로 어떻게 사용되는지 살펴봅니다.

// 이 가이드에서 배운 타입 클래스 패턴
trait Monoid[A]:
  def empty: A
  def combine(x: A, y: A): A

// Cats에서는 이렇게 활용합니다
import cats.syntax.all.*
import cats.Monoid

// 이미 정의된 인스턴스 사용
List(1, 2, 3).combineAll  // 6 (Monoid[Int] 사용)
List("a", "b").combineAll // "ab" (Monoid[String] 사용)

// 커스텀 타입에 적용
case class Order(total: Int, items: Int)

given Monoid[Order] with
  def empty = Order(0, 0)
  def combine(x: Order, y: Order) =
    Order(x.total + y.total, x.items + y.items)

List(Order(100, 2), Order(200, 3)).combineAll
// Order(300, 5)

연결 개념: Type Classes, Implicits/Given

ZIO: 함수형 효과 시스템

Higher-Order FunctionsFor Comprehensions이 ZIO에서 빛을 발합니다.

import zio.*

// 부수 효과를 값으로 표현
val readLine: ZIO[Any, IOException, String] = Console.readLine
val printLine: String => ZIO[Any, IOException, Unit] = Console.printLine

// for comprehension으로 순차 실행
val program: ZIO[Any, IOException, Unit] = for
  _    <- printLine("이름을 입력하세요:")
  name <- readLine
  _    <- printLine(s"안녕하세요, $name!")
yield ()

// 이 시점에서는 아무것도 실행되지 않음 (순수 값)
// Unsafe.unsafe { implicit u => Runtime.default.unsafe.run(program) }

연결 개념: For Comprehensions, Functional Patterns

http4s: 함수형 HTTP

Pattern MatchingCase Classes가 라우팅에 활용됩니다.

import org.http4s.*
import org.http4s.dsl.io.*

// 패턴 매칭으로 HTTP 라우팅
val routes = HttpRoutes.of[IO] {
  case GET -> Root / "users" / IntVar(id) =>
    Ok(s"User $id")

  case req @ POST -> Root / "users" =>
    req.as[User].flatMap(user => Created(user.asJson))

  case GET -> Root / "health" =>
    Ok("healthy")
}

연결 개념: Pattern Matching, Case Classes

Circe: JSON 타입 클래스

Type ClassesGenerics가 JSON 변환에 사용됩니다.

import io.circe.*
import io.circe.generic.auto.*
import io.circe.syntax.*

// case class 정의만 하면 자동으로 JSON 변환 가능
case class User(name: String, age: Int)

val user = User("Alice", 30)
user.asJson.noSpaces  // {"name":"Alice","age":30}

// 파싱도 타입 클래스로
"""{"name":"Bob","age":25}""".as[User]
// Right(User("Bob", 25))

연결 개념: Case Classes, Type Classes

다음 학습 방향

관심 분야에 따라 추천하는 라이브러리와 학습 자료입니다.

관심 분야추천 라이브러리참고 자료
함수형 기초CatsScala with Cats (무료)
비동기/동시성ZIO 또는 Cats EffectZIO 공식 문서
웹 개발http4s + Circehttp4s 튜토리얼
데이터 처리SparkSpark Scala API
핵심 포인트
  • Cats/ZIO: 함수형 프로그래밍 라이브러리, 타입 클래스와 효과 시스템
  • http4s + Circe: 함수형 웹 개발 스택
  • Spark: 빅데이터 처리, Scala 2 필요

온라인 강의#

동영상으로 Scala를 배울 수 있는 강의들입니다.

무료

무료로 제공되는 양질의 강의 자료입니다.

유료

더 체계적인 학습을 원하는 분을 위한 유료 강의입니다.

핵심 포인트
  • 무료 추천: Coursera의 Martin Odersky 강의 (Scala 창시자)
  • 유료: Rock the JVM (종합적), Zionomicon (ZIO 심화)
  • Scala 3: 공식 문서의 New Features 페이지 필독

라이브러리 문서#

주요 Scala 라이브러리들의 공식 문서 링크입니다.

함수형 프로그래밍

  • Cats — 타입 클래스 라이브러리
  • ZIO — 효과 시스템
  • Cats Effect — 비동기/동시성

웹 개발

데이터 처리

JSON

테스트

핵심 포인트
  • 함수형: Cats(타입 클래스), ZIO(효과 시스템), Cats Effect(비동기)
  • : http4s(함수형), Play(풀스택), Akka HTTP(액터 기반)
  • 데이터: Doobie(DB), Circe(JSON), Spark(분산 처리)

커뮤니티#

Scala 개발자들과 소통할 수 있는 채널들입니다.

포럼/디스코드

Q&A

블로그/뉴스

핵심 포인트
  • 실시간 질문: Scala Discord, Typelevel Discord
  • Q&A: Stack Overflow(검색), Reddit r/scala(토론)
  • 최신 정보: Scala Times 주간 뉴스레터 구독

도구#

개발 생산성을 높여주는 도구들입니다.

IDE

유틸리티

  • Scastie — 온라인 Scala 실행 ⭐ 이 가이드의 모든 예제를 여기서 실행 가능!
  • Scaladex — 라이브러리 검색
  • Scalafmt — 코드 포맷터
  • Scalafix — 리팩토링 도구
핵심 포인트
  • IDE: IntelliJ(완성도), VS Code + Metals(가벼움)
  • 필수 도구: Scastie(온라인 실행), Scaladex(라이브러리 검색)
  • 코드 품질: Scalafmt(포맷팅), Scalafix(리팩토링)

컨퍼런스#

Scala 커뮤니티의 주요 컨퍼런스들입니다.

추천 학습 경로#

단계별 학습 경로를 제안합니다.

입문자

  1. Quick Start로 환경 설정
  2. Tour of Scala로 핵심 개념
  3. “Scala for the Impatient” 또는 Coursera 강의
  4. 간단한 프로젝트 실습

중급자

  1. “Programming in Scala” 정독
  2. Cats 또는 ZIO 학습
  3. 실무 프로젝트에 함수형 스타일 적용

고급자

  1. “Functional Programming in Scala”
  2. “Scala with Cats”
  3. 타입 시스템 심화 (Shapeless, Type-level programming)
  4. 오픈 소스 기여