Scala 3, 또는 Dotty는 현대적인 언어 기능을 제공하며, 복잡한 소프트웨어 시스템을 구축할 때 프로그래머가 느끼는 어려움을 해결하기 위해 설계된 컴파일러입니다. Scala 3는 타입 시스템을 대폭 개선하여 안정성과 성능을 높였으며, 함수형 프로그래밍과 객체지향 프로그래밍의 장점을 모두 통합하고 있습니다. 이 글에서는 Scala 3의 주요 기능과 설치 방법, 기본 사용법, 그리고 실무 활용 사례에 대해 자세히 살펴보겠습니다.
Scala 3의 주요 기능과 특징
Scala 3는 기존 Scala 언어의 진화판으로, 아래와 같은 주요 기능을 제공합니다:
- 향상된 타입 시스템: Scala 3는 새로운 타입 시스템을 도입하여 더 안전하고 명확한 코드 작성을 가능하게 합니다. 예를 들어, 'opaque types'와 'union types' 같은 기능을 활용하면 복잡한 타입을 더욱 쉽게 다룰 수 있습니다.
- 패턴 매칭 개선: 패턴 매칭의 구문이 간소화되고 기능이 향상되어 코드의 가독성이 높아졌습니다. 이제는 더 직관적으로 다양한 조건을 다룰 수 있습니다.
- Contextual Abstractions: Scala 3에서는
given과using키워드를 통해 컨텍스트에 따라 다르게 행동하는 코드를 쉽게 작성할 수 있습니다. 이는 DI(Dependency Injection)와 같은 패턴을 구현할 때 유용합니다. - 새로운 메타프로그래밍 기능: Scala 3는 매크로와 같은 메타프로그래밍 기능을 지원하여, 코드 생성을 자동화하고 효율성을 높일 수 있습니다.
설치와 기본 사용법
Scala 3를 설치하기 위해서는 SBT(Scala Build Tool)를 사용하는 것이 가장 일반적입니다. 아래의 단계를 따라 Scala 3를 설치해보세요.
1. SBT 설치
먼저, SBT를 설치해야 합니다. SBT의 설치 방법은 운영체제에 따라 다르므로, SBT 공식 문서를 참고하세요.
2. 새로운 Scala 3 프로젝트 생성
터미널에서 다음 명령어를 실행하여 새로운 프로젝트를 생성합니다.
sbt new scala/scala3.g8
이 명령어는 Scala 3 템플릿을 기반으로 새로운 프로젝트를 생성합니다.
3. 프로젝트 디렉토리로 이동
cd <project-name>
위의 <project-name>은 생성한 프로젝트의 이름으로 바꿔줍니다.
4. 코드 작성 및 실행
src/main/scala/Main.scala 파일을 열고 다음 코드를 추가합니다.
@main def hello(): Unit =
println("Hello, Scala 3!")
코드가 작성되었으면, 아래 명령어로 프로젝트를 실행합니다.
sbt run
이제 터미널에 "Hello, Scala 3!"라는 메시지가 출력되어야 합니다.
실무에서의 활용 시나리오
Scala 3는 웹 애플리케이션, 데이터 처리, 머신러닝 및 분산 시스템 등 다양한 도메인에서 활용됩니다. 예를 들어, 대규모 데이터 처리 시스템에서는 Scala의 함수형 프로그래밍 기능을 활용하여 데이터를 효과적으로 처리하고, Spark와 같은 프레임워크와 함께 사용할 수 있습니다.
예제: 간단한 웹 서버 만들기
Scala 3와 함께 사용할 수 있는 인기 있는 웹 프레임워크인 Akka HTTP를 이용하여 간단한 웹 서버를 만들어 보겠습니다.
// build.sbt
name := "Scala3WebServer"
scalaVersion := "3.1.0"
libraryDependencies += "com.typesafe.akka" %% "akka-http" % "10.2.7"
다음으로, src/main/scala/Main.scala 파일에 다음 코드를 추가합니다.
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.server.Route
import akka.http.scaladsl.server.Directives._
import scala.concurrent.ExecutionContext
object Main:
given system: ActorSystem = ActorSystem("MySystem")
given ec: ExecutionContext = system.dispatcher
val route: Route =
path("hello") {
get {
complete("Hello from Scala 3 with Akka HTTP!")
}
}
@main def run(): Unit =
Http().newServerAt("localhost", 8080).bind(route)
println("Server online at http://localhost:8080/hello")
이제 다시 sbt run으로 실행하면, 웹 서버가 시작되고 http://localhost:8080/hello에 접속하면 "Hello from Scala 3 with Akka HTTP!"라는 메시지를 볼 수 있습니다.
비슷한 도구와의 비교
Scala 3는 Kotlin, Swift와 같은 현대적인 언어와 경쟁하고 있습니다. Kotlin은 Android 개발에 최적화되어 있으며, Swift는 Apple 생태계에서 인기가 높습니다. Scala는 JVM 기반의 강력한 기능을 제공하며, 특히 분산 시스템과 데이터 처리에 강점을 가지고 있습니다. 이러한 점에서 Scala 3는 특정 도메인에 더 잘 맞는 언어입니다.
마무리
Scala 3는 현대 소프트웨어 개발에서 요구되는 여러 가지 문제를 해결하기 위해 설계된 강력한 언어입니다. 향상된 타입 시스템과 메타프로그래밍 기능은 코드의 안정성과 생산성을 높여 줍니다. 개발자들은 이 언어를 활용하여 다양한 분야에서 복잡한 문제를 효율적으로 해결할 수 있습니다.
개발에 관심이 있는 모든 분들, 특히 함수형 프로그래밍에 대한 경험이 있는 분들에게 Scala 3를 추천합니다. 공식 문서와 GitHub 리포지토리를 통해 더 많은 정보를 얻고, 여러분의 프로젝트에 Scala 3를 통합해 보세요.
GitHub 링크: scala/scala3