일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- APM
- Pinpoint
- kotlin
- aws
- Java
- MySQL
- CloudWatch
- 기록으로 실력을 쌓자
- CKA
- 티스토리챌린지
- Spring
- kotlin querydsl
- AWS EKS
- 오블완
- 정보처리기사 실기
- Linux
- mysql 튜닝
- kotlin coroutine
- 정보처리기사실기 기출문제
- Elasticsearch
- 공부
- IntelliJ
- minikube
- kotlin spring
- AI
- 코틀린 코루틴의 정석
- PETERICA
- 정보처리기사 실기 기출문제
- CKA 기출문제
- Kubernetes
- Today
- Total
피터의 개발이야기
[Scala] 스칼라 기본 문법 정리 본문
ㅁ 들어가며
ㅇ AI팀으로 이동하면서 다양한 언어를 배우고 있다.
ㅇ 스칼라의 개념과 기본 문법을 정리하였다.
ㅇ 문법 중에서도 함수형 코딩을 [Scala] 스칼라 함수형 프로그래밍에 정리하였다.
ㅁ Scala란?
ㅇ 2004년 마틴 오더스키가 발표한 멀티-패러다임 프로그래밍 언어
ㅇ 객체지향과 함수형 프로그래밍을 결합한 하이브리드 언어
ㅁ 주요 특징
ㅇ 순수 객체지향: 모든 값이 객체이며, 함수도 객체로 취급
ㅇ 함수형 프로그래밍: 순수 함수, 익명 함수, 고차 함수 지원
ㅇ JVM 기반: 자바 가상 머신 위에서 동작하여 자바 라이브러리 사용 가능
ㅇ 바이트 코드 최적화: 자바보다 약 20% 빠른 속도
ㅇ 동시성 강화: 불변 변수와 순수 함수를 통한 병렬 프로그래밍 지원
ㅁ 스칼라의 프레임워크
ㅇ 스칼라에는 다양한 프레임워크가 있다. 주요 스칼라 프레임워크들을 정리하면 다음과 같다.
웹 프레임워크
ㅇ Play Framework:
ㄴ 가장 인기 있는 스칼라 웹 프레임워크 중 하나
ㄴ RESTful 애플리케이션 개발에 적합하며, 높은 확장성과 성능을 제공
ㅇ Akka HTTP: Akka 액터 시스템을 기반으로 한 경량 웹 프레임워크로, 비동기 및 스트리밍 처리에 강점
ㅇ http4s: 순수 함수형 프로그래밍 스타일의 HTTP 서버 및 클라이언트 라이브러리
빅데이터 및 분산 시스템
ㅇ Apache Spark: 대규모 데이터 처리를 위한 분산 컴퓨팅 프레임워크로, 스칼라로 작성되었습니다.
ㅇ Akka: 분산 시스템 및 동시성 애플리케이션 개발을 위한 툴킷입니다.
데이터베이스 액세스
ㅇ Slick: 함수형 관계형 매핑(FRM) 라이브러리로, 타입 안전한 데이터베이스 쿼리를 작성할 수 있습니다.
ㅇ Doobie: 순수 함수형 JDBC 레이어로, 타입 안전한 데이터베이스 액세스를 제공합니다.
테스트 프레임워크
ㅇ ScalaTest: 스칼라를 위한 유연한 테스트 프레임워크입니다.
ㅇ Specs2: 소프트웨어 명세와 테스트를 위한 라이브러리
ㅁ 주요 문법 정리
변수 선언
val x = 1 // x는 변경 불가
var y = 2 // y는 변경 가능
ㅇ 스칼라에서는 두 가지 방식으로 변수를 선언할 수 있다.
- val: 변경 불가능한(immutable) 변수 선언
- var: 변경 가능한(mutable) 변수 선언
val z: Int = 3
ㅇ 타입을 명시적으로 지정할 수도 있다.
함수 정의
def add(x: Int, y: Int): Int = {
x + y
}
ㅇ 함수는 def 키워드를 사용하여 정의한다.
def add(x: Int, y: Int): Int = x + y
ㅇ 함수 본문이 한 줄인 경우 중괄호를 생략할 수 있다.
def add(x: Int, y: Int) = x + y
ㅇ 반환 타입은 컴파일러가 추론할 수 있어 생략 가능하다.
클래스와 객체
ㅇ 클래스는 다음과 같이 정의한다.
class Person(name: String, age: Int)
ㅇ 싱글톤 객체는 object 키워드로 선언한다.
object Calculator {
def add(x: Int, y: Int) = x + y
}
트레이트(Traits)
ㅇ 트레이트는 자바의 인터페이스와 유사하지만 구현을 포함할 수 있다.
trait Greeting {
def greet(name: String): Unit = {
println(s"Hello, $name!")
}
}
class EnglishGreeter extends Greeting
컬렉션과 반복문
ㅇ 스칼라는 다양한 컬렉션 타입을 제공한다. 예를 들어 리스트는 다음과 같이 생성할 수 있다.
val numbers = List(1, 2, 3, 4, 5)
ㅇ for 문을 사용한 반복은 다음과 같다.
for (i <- numbers) {
println(i)
}
패턴 매칭
ㅇ 스칼라의 강력한 기능 중 하나인 패턴 매칭은 다음과 같이 사용한다.
val x = 5
x match {
case 1 => println("One")
case 2 => println("Two")
case _ => println("Other")
}
함수형 프로그래밍 기능
ㅇ 스칼라는 함수형 프로그래밍을 지원한다. 예를 들어, map과 reduce 함수를 사용할 수 있다.
val list = (1 to 10)
val sum = list.reduce(_ + _) // 55
ㅇ 스칼라에서 순수 함수, 익명 함수, 고차 함수의 지원은 함수형 프로그래밍의 핵심 요소이다.
순수 함수
def add(a: Int, b: Int): Int = a + b
println(add(3, 4)) // 항상 7을 반환
ㅇ 순수 함수는 동일한 입력에 대해 항상 동일한 출력을 하며, 부작용(side effect)이 없는 함수이다.
ㅇ 외부에 영향을 미치지 않기 thread-safe하여, 병렬처리가 가능하다.
ㅇ 이 add 함수는 외부 상태를 변경하지 않고, 입력값에만 의존하여 결과를 반환하므로 순수 함수이다.
익명 함수 (람다)
ㅇ 익명 함수는 이름 없이 정의되는 함수로, 주로 다른 함수에 인자로 전달될 때 사용된다.
val numbers = List(1, 2, 3, 4, 5)
// 익명 함수를 사용한 map 연산
val doubled = numbers.map(x => x * 2)
println(doubled) // List(2, 4, 6, 8, 10)
ㅇ 여기서 x => x * 2는 익명 함수이다.
ㅇ 전통적인 명령형 언어는 함수에 이름이 꼭 필요하였지만, 함수형은 익명 함수를 생성하여 코드가 더욱 간결해졌다.
고차 함수
ㅇ 고차 함수는 함수를 인자로 받거나 함수를 반환하는 함수이다.
// 고차 함수 정의
def operateOnNumbers(a: Int, b: Int)(operation: (Int, Int) => Int): Int = {
operation(a, b)
}
// 고차 함수 사용
val sum = operateOnNumbers(5, 3)((x, y) => x + y)
val product = operateOnNumbers(5, 3)(_ * _)
println(sum) // 8
println(product) // 15
ㅇ operateOnNumbers는 두 숫자와 연산 함수를 인자로 받는 고차 함수이다.
ㅇ 이 함수는 다양한 연산을 수행할 수 있어 유연성이 높다.
ㅁ 함께 보면 좋은 사이트
'Programming > Scala' 카테고리의 다른 글
[Scala] flatMap과 match을 사용하는 법 (0) | 2024.11.26 |
---|---|
[Scala] 스칼라 함수형 프로그래밍 (0) | 2024.09.11 |