일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- kotlin coroutine
- 오블완
- APM
- Kubernetes
- AI
- CKA 기출문제
- 정보처리기사 실기
- 기록으로 실력을 쌓자
- PETERICA
- minikube
- kotlin spring
- Elasticsearch
- aws
- MySQL
- kotlin
- CloudWatch
- IntelliJ
- mysql 튜닝
- 공부
- kotlin querydsl
- 코틀린 코루틴의 정석
- 정보처리기사실기 기출문제
- Linux
- AWS EKS
- Spring
- 정보처리기사 실기 기출문제
- Java
- 티스토리챌린지
- CKA
- Pinpoint
- Today
- Total
피터의 개발이야기
[Scala] 스칼라 함수형 프로그래밍 본문
수학은 이해하는게 아니라 익숙해지는것이다.
폰노이만
ㅁ 들어가며
[Scala] 스칼라 기본 문법 정리에서 스칼라의 개념과 기본 문법을 정리하였다. 스칼라는 함수형 프로그래밍을 강력하게 지원하는 언어이다. 이 글은 스칼라에서 함수형 프로그래밍을 적용하는 주요 방법들을 정리해 보았다.
ㅁ 불변성(Immutability) 활용
val immutableList = List(1, 2, 3)
ㅇ 스칼라에서는 val 사용하여 불변 변수를 선언할 수 있다.
ㅇ 이를 통해 side effect를 줄이고 코드의 예측 가능성을 높일 수 있다.
ㅁ 순수 함수(Pure Functions) 사용
def add(x: Int, y: Int): Int = x + y
ㅇ 순수 함수는 동일한 입력에 대해 항상 동일한 출력을 반환하며, 외부 상태를 변경하지 않는다.
ㅁ 고차 함수
ㅇ 고차 함수는 함수를 인자로 받거나 함수를 반환하는 함수이다.
// 고차 함수 정의
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
// 익명의 고차 함수
val numbers = List(1, 2, 3, 4, 5)
val doubled = numbers.map(x => x * 2)
ㅇ operateOnNumbers는 두 숫자와 연산 함수를 인자로 받는 고차 함수이다.
ㅇ 이 함수는 다양한 연산을 수행할 수 있어 유연성이 높다.
val numbers = List(1, 2, 3, 4, 5)
val doubled = numbers.map(x => x * 2)
ㅇ 스칼라에서는 함수를 다른 함수의 인자로 전달하거나 반환값으로 사용할 수 있다.
ㅁ 재귀(Recursion)
def factorial(n: Int): Int = {
if (n <= 1) 1
else n * factorial(n - 1)
}
ㅇ 반복문 대신 재귀를 사용하여 문제를 해결할 수 있다.
ㅇ 스칼라는 재귀 최적화를 지원한다.
ㅁ 패턴 매칭(Pattern Matching)
def describe(x: Any): String = x match {
case 5 => "five"
case true => "truth"
case "hello" => "hi!"
case Nil => "the empty list"
case _ => "something else"
}
ㅇ 복잡한 조건문 대신 패턴 매칭을 사용하여 코드를 더 선언적으로 작성할 수 있다.
ㅁ 컬렉션 연산
val list = (1 to 10)
val sum = list.reduce(_ + _) // 55
ㅇ 스칼라는 map, filter, reduce 등 함수형 스타일의 컬렉션 연산을 제공한다.
ㅁ 옵션 타입(Option Type)
def divide(x: Int, y: Int): Option[Int] =
if (y != 0) Some(x / y) else None
ㅇ null 대신 Option을 사용하여 값의 부재를 표현한다.
ㅇ 이 부분은 코틀린의 null safe가 더 좋아 보인다.
ㅁ 불변 데이터 구조
val immutableMap = Map("key1" -> "value1", "key2" -> "value2")
ㅇ 스칼라는 불변 리스트, 벡터, 맵 등의 컬렉션을 제공한다.
ㅁ 마무리
이러한 기법들을 활용하면 스칼라에서 함수형 프로그래밍 스타일로 코드를 작성할 수 있다. 함수형 프로그래밍은 코드의 가독성을 높이고, 병렬 처리를 용이하게 하며, 버그를 줄이는 데 도움이 된다. 또한 스칼라는 객체지향 프로그래밍과 함수형 프로그래밍을 혼합하여 사용할 수 있어, 상황에 따라 적절한 패러다임을 선택할 수 있는 유연성을 제공한다. 개인적으로 코틀린을 먼저 공부하고 스칼라를 공부하여 유사한 점이 많아 쉽게 이해할 수 있는 부분도 있었지만, null-safe나 scope 연산자가 있는 코틀린이 더 유용해 보인다.
ㅁ 함께 보면 좋은 사이트
'Programming > Scala' 카테고리의 다른 글
[Scala] flatMap과 match을 사용하는 법 (0) | 2024.11.26 |
---|---|
[Scala] 스칼라 기본 문법 정리 (2) | 2024.09.10 |