0Pricing
Swift Academy · 강의

Comparable과 정렬

정렬을 위해 <로 순서를 정의합니다.

Comparable과 정렬은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

Comparable이란 무엇인가요?

Comparable은 타입에 순서 비교 연산자인 <, <=, >, >=를 제공합니다. 이를 준수하면 sorted(), min(), max()를 직접 호출할 수 있습니다.

&lt;로 준수 선언하기

<만 구현하면 나머지는 자동으로 만들어집니다. (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))  // true

Comparable 타입 정렬하기

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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 자동 생성되는 Equatable
  2. Hashable과 hash(into:)
  3. Comparable과 정렬
  4. 사용자 지정 동등성 의미
← Swift Academy(으)로 돌아가기