Comparable과 정렬
정렬을 위해 <로 순서를 정의합니다.
Comparable과 정렬은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
Comparable이란 무엇인가요?
Comparable은 타입에 순서 비교 연산자인 <, <=, >, >=를 제공합니다. 이를 준수하면 sorted(), min(), max()를 직접 호출할 수 있습니다.
<로 준수 선언하기
<만 구현하면 나머지는 자동으로 만들어집니다. (Equatable도 필요합니다.)
struct Version: Comparable {
let major: Int
static func < (l: Version, r: Version) -> Bool { l.major < r.major }
}
print(Version(major: 1) < Version(major: 2)) // trueComparable 타입 정렬하기
Comparable을 준수하면 sorted()에 클로저가 필요하지 않습니다.
struct Score: Comparable {
let points: Int
static func < (l: Score, r: Score) -> Bool { l.points < r.points }
}
let sorted = [Score(points: 3), Score(points: 1), Score(points: 2)].sorted()
print(sorted.map { $0.points }) // [1, 2, 3]min과 max를 바로 사용하기
Comparable을 준수하면 집계 도우미도 사용할 수 있습니다.
struct Temp: Comparable {
let c: Int
static func < (l: Temp, r: Temp) -> Bool { l.c < r.c }
}
let temps = [Temp(c: 20), Temp(c: 5), Temp(c: 30)]
print(temps.min()!.c, temps.max()!.c) // 5 30여러 키로 정렬하기
여러 필드를 기준으로 동률을 해소하려면 < 안에서 우선순위 순서대로 비교하고 튜플을 사용하면 됩니다. Swift는 튜플을 사전식 순서로 비교합니다.
튜플 비교 기법
성으로 비교한 다음 이름으로 비교합니다.
struct Person: Comparable {
let last: String
let first: String
static func < (l: Person, r: Person) -> Bool {
(l.last, l.first) < (r.last, r.first)
}
}
let p = [Person(last: "Lee", first: "Bo"), Person(last: "Lee", first: "An")].sorted()
print(p.map { $0.first }) // ["An", "Bo"]Comparable 없이 정렬하기
타입이 Comparable이 아니어도 후행 클로저를 사용하여 언제든 정렬할 수 있습니다.
struct Item { let name: String; let qty: Int }
let items = [Item(name: "B", qty: 2), Item(name: "A", qty: 5)]
let byQty = items.sorted { $0.qty > $1.qty }
print(byQty.map { $0.name }) // ["A", "B"]내림차순 정렬
비교 방향을 반대로 바꾸거나 .reversed()를 호출합니다.
let nums = [3, 1, 4, 1, 5]
print(nums.sorted(by: >)) // [5, 4, 3, 1, 1]
print(nums.sorted().reversed()) // [5, 4, 3, 1, 1]sorted와 sort
sorted()는 새 배열을 반환하고, sort()는 배열을 제자리에서 변경합니다. 제자리 변경을 하려면 var가 필요합니다.
var nums = [3, 1, 2]
nums.sort()
print(nums) // [1, 2, 3]
let copy = [3, 1, 2].sorted()
print(copy) // [1, 2, 3]안정성이 보장되는 정렬
Swift의 정렬은 Swift 5부터 안정성이 보장됩니다. 같은 요소는 원래의 상대적 순서를 유지합니다. 예측 가능한 다중 단계 정렬을 위해 이 특성을 활용할 수 있습니다.
let words = ["bb", "a", "cc", "d"]
let byLen = words.sorted { $0.count < $1.count }
print(byLen) // ["a", "d", "bb", "cc"] -- "a" before "d", "bb" before "cc"키 경로로 정렬하기
전체 타입이 준수하지 않아도 프로퍼티를 읽는 클로저를 사용하여 정렬할 수 있습니다.
struct Player { let name: String; let score: Int }
let players = [Player(name: "A", score: 30), Player(name: "B", score: 50)]
let ranked = players.sorted { $0.score > $1.score }
print(ranked.map { $0.name }) // ["B", "A"]빠른 확인
Comparable을 준수하려면 어떤 연산자 하나를 구현해야 하나요?
복습
Comparable에 대해 다음을 배웠습니다.
Comparable은 순서 비교 연산자를 제공하며,<만 구현하면 됩니다.- 클로저 없이
sorted(),min(),max()를 사용할 수 있습니다. - 튜플 비교를 사용하면 여러 키로 쉽게 정렬할 수 있습니다.
sorted()는 새 배열을 반환하고sort()는 배열을 변경하며, 정렬은 안정적입니다.
다음 주제: 사용자 지정 동등성 의미
자주 묻는 질문
“Comparable과 정렬” 강의는 무료인가요?
네 — “Comparable과 정렬” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“Comparable과 정렬”에서 뭘 배우나요?
정렬을 위해 <로 순서를 정의합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“Comparable과 정렬” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 자동 생성되는 Equatable
- Hashable과 hash(into:)
- Comparable과 정렬
- 사용자 지정 동등성 의미