구조 분해
데이터에서 값을 추출합니다
구조 분해은(는) CoddyKit의 무료 Scala for Backend Engineering & Functional Programming 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Scala for Backend Engineering & Functional Programming 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Scala for Backend Engineering & Functional Programming 강의에는 총 4개의 강의가 포함되어 있습니다.
구조 분해란 무엇인가요
구조 분해(destructuring이라고도 함)는 데이터 구조의 구성 요소를 패턴에서 직접 추출하는 것을 의미합니다.
접근자 메서드를 호출하는 대신 구조를 설명하고 필요한 구성 요소의 이름을 지정합니다.
튜플 구조 분해하기
튜플은 여러 값을 하나로 묶습니다. 괄호 안에 이름을 작성하면 한 번의 바인딩으로 값을 나눌 수 있습니다.
object Main {
def main(args: Array[String]): Unit = {
val pair = ("Ada", 1815)
val (name, year) = pair
println(s"$name was born in $year")
}
}match에서 튜플 사용하기
match 안에서 튜플을 구조 분해하여 각 구성 요소의 이름을 지정하거나 일치시킬 수 있습니다.
object Main {
def quadrant(p: (Int, Int)): String = p match {
case (0, 0) => "origin"
case (x, 0) => s"on x-axis at $x"
case (0, y) => s"on y-axis at $y"
case (x, y) => s"point ($x, $y)"
}
def main(args: Array[String]): Unit = {
println(quadrant((0, 0)))
println(quadrant((3, 0)))
println(quadrant((2, 5)))
}
}목록의 첫 요소 구조 분해하기
:: 연산자(cons)는 목록을 첫 번째 요소(헤드)와 나머지 요소(테일)로 나눕니다.
head :: tail 패턴은 비어 있지 않은 모든 목록과 일치합니다.
object Main {
def first(xs: List[Int]): String = xs match {
case head :: tail => s"head=$head, rest=$tail"
case Nil => "empty"
}
def main(args: Array[String]): Unit = {
println(first(List(10, 20, 30)))
println(first(Nil))
}
}정확한 목록 구조와 일치시키기
List(a, b)처럼 요소를 나열하면 특정 길이의 목록과 일치시킬 수 있습니다. 예를 들어 List(a, b)는 정확히 두 항목인 목록과 일치합니다.
object Main {
def shape(xs: List[Int]): String = xs match {
case List() => "none"
case List(a) => s"one: $a"
case List(a, b) => s"two: $a, $b"
case _ => "many"
}
def main(args: Array[String]): Unit = {
println(shape(List()))
println(shape(List(1)))
println(shape(List(1, 2)))
println(shape(List(1, 2, 3)))
}
}헤드와 테일로 재귀하기
헤드와 테일을 나누면 목록을 깔끔하게 재귀 처리할 수 있습니다.
여기서는 헤드와 테일의 합을 더하여 목록의 합을 계산합니다.
object Main {
def sum(xs: List[Int]): Int = xs match {
case Nil => 0
case head :: tail => head + sum(tail)
}
def main(args: Array[String]): Unit = {
println(sum(List(1, 2, 3, 4)))
}
}중첩된 구조 분해하기
패턴은 중첩할 수 있습니다. 한 번에 목록 안의 튜플이나 튜플 안의 목록을 구조 분해할 수 있습니다.
object Main {
def main(args: Array[String]): Unit = {
val data = List(("a", 1), ("b", 2))
data match {
case (key, value) :: _ => println(s"first key=$key value=$value")
case Nil => println("empty")
}
}
}_로 구성 요소 무시하기
관심이 없는 구성 요소에는 _를 사용하세요. 이렇게 하면 실제로 필요한 데이터에 패턴의 초점을 맞출 수 있습니다.
object Main {
def main(args: Array[String]): Unit = {
val triple = (1, 2, 3)
val (_, middle, _) = triple
println(s"middle = $middle")
}
}처음 두 요소를 바인딩하고 나머지 유지하기
첫 번째 요소들의 이름을 지정하고 테일 패턴으로 그 뒤의 모든 요소를 캡처할 수 있습니다.
object Main {
def main(args: Array[String]): Unit = {
val xs = List(1, 2, 3, 4, 5)
xs match {
case a :: b :: rest => println(s"a=$a b=$b rest=$rest")
case _ => println("too short")
}
}
}구조 분해를 사용하는 이유
구조 분해를 사용하면 데이터에 다음과 같은 방식으로 접근할 수 있습니다.
- 선언적: 절차가 아니라 구조를 설명합니다
- 안전함: 추출하는 동안 구조를 확인합니다
- 간결함: 하나의 패턴에서 여러 값을 바인딩합니다
케이스 클래스와 함께 사용하면 훨씬 강력해집니다.
종합하기
이 예제에서는 튜플 목록을 구조 분해하고 그 구조에 따라 처리합니다.
object Main {
def report(scores: List[(String, Int)]): String = scores match {
case Nil => "no scores"
case (name, pts) :: Nil => s"only $name with $pts"
case (name, pts) :: rest => s"top $name=$pts plus ${rest.size} more"
}
def main(args: Array[String]): Unit = {
println(report(Nil))
println(report(List(("Ann", 90))))
println(report(List(("Ann", 90), ("Bo", 80))))
}
}빠른 확인
구조 분해에 대한 이해도를 확인해 보세요.
복습
패턴에서 데이터를 구조 분해하는 방법을 배웠습니다.
- 튜플은
(a, b)로 나눕니다 - 목록은
head :: tail또는List(a, b)와 같은 정확한 구조로 나눕니다 Nil은 빈 목록과 일치합니다- 구성 요소를 무시하려면
_를 사용하고, 깊이 중첩된 구조에는 패턴을 중첩합니다 - 헤드와 테일로 나누면 깔끔한 재귀가 가능합니다
자주 묻는 질문
“구조 분해” 강의는 무료인가요?
네 — “구조 분해” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Scala for Backend Engineering & Functional Programming 강의 전체를 잠금 해제할 수 있습니다. Scala for Backend Engineering & Functional Programming 강의에는 총 4개의 강의가 포함되어 있습니다.
“구조 분해”에서 뭘 배우나요?
데이터에서 값을 추출합니다 브라우저에서 직접 실행하는 실습 코드로 Scala for Backend Engineering & Functional Programming을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Scala for Backend Engineering & Functional Programming을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Scala for Backend Engineering & Functional Programming은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“구조 분해” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Scala for Backend Engineering & Functional Programming 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Scala for Backend Engineering & Functional Programming 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.