Hashable/Equatable/Comparable 파생
간단한 구조체와 열거형에 대해 Swift가 Equatable/Hashable(및 Codable)을 synthesize 하도록 하고, 필요할 때 사용자 지정 Comparable (사전식)과 수동 hash(into:) 를 구현합니다.
Hashable/Equatable/Comparable 파생은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 3개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
자동으로 생성되는 것은 무엇입니까?
Swift는 단순한 형식에 대해 일반적인 적합성을 자동으로 생성할 수 있습니다.
- 동등성 비교 가능: 값의 동등성
- 해시 가능: 사전/집합 키
- 인코딩 및 디코딩 가능: 인코딩/디코딩
비교 가능은 직접 구현하거나(사전식 순서), 해당하는 경우 열거형 항목 순서에 의존할 수 있습니다.
구조체의 자동 생성
저장 프로퍼티가 동등성 비교 또는 해시를 지원하는 구조체라면 Swift가 두 적합성을 모두 자동으로 생성합니다.
struct Point: Equatable, Hashable {
var x: Int
var y: Int
// No extra code: Equatable & Hashable are synthesized
}
let p1 = Point(x: 1, y: 2)
let p2 = Point(x: 1, y: 2)
print(p1 == p2) // true
let set: Set<Point> = [p1, p2] // Hashable works; duplicates coalesce
print(set.count) // 1열거형의 비교 가능
연관 값이 없는 열거형은 항목 순서를 기준으로 비교 가능 적합성을 자동으로 생성할 수 있습니다.
enum Priority: Comparable { case low, medium, high }
// Comparable is synthesized using case order: low < medium < high
print(Priority.low < .high) // true구조체의 비교 가능
구조체에서는 <를 직접 작성하십시오. 간단한 사전식 비교(last, 그다음 first)가 일반적으로 사용됩니다.
struct Person: Comparable, Hashable {
let last: String
let first: String
static func < (lhs: Person, rhs: Person) -> Bool {
if lhs.last != rhs.last { return lhs.last < rhs.last }
return lhs.first < rhs.first
}
}
let a = Person(last: "Doe", first: "Ana")
let b = Person(last: "Doe", first: "Max")
print(a < b) // true (Ana before Max)사용자 지정 동등성 및 해시
동등성 또는 해시가 서식을 무시해야 한다면 ==와 hash(into:)를 작성하십시오(예: 대소문자와 공백).
struct FileID: Hashable, Equatable {
let path: String
// Normalize case/trim when hashing & comparing
static func == (l: FileID, r: FileID) -> Bool {
l.path.lowercased().trimmingCharacters(in: .whitespaces) ==
r.path.lowercased().trimmingCharacters(in: .whitespaces)
}
func hash(into hasher: inout Hasher) {
hasher.combine(path.lowercased().trimmingCharacters(in: .whitespaces))
}
}
let f1 = FileID(path: " Readme.md ")
let f2 = FileID(path: "readme.md")
print(f1 == f2) // true
print(Set([f1, f2]).count) // 1권장 사항
팁:
- ==와 hash(into:)를 일관되게 유지하십시오. 동일한 값은 같은 방식으로 해시되어야 합니다.
- 먼저 자동 생성을 우선 사용하고, 사용자 지정 의미가 필요할 때만 직접 구현하십시오.
- 비교 가능의 순서 규칙을 문서화하십시오.
- 간단한 순서 척도가 적합하다면 페이로드가 없는 열거형을 사용하십시오.
자동 생성 확인 목록
빠른 확인: Swift가 단순한 구조체와 열거형에 대해 자동으로 생성할 수 있는 것은 무엇입니까?
복습
복습: 단순한 모델에는 Swift가 동등성 비교 가능/해시 가능(및 인코딩 및 디코딩 가능) 적합성을 자동으로 생성하도록 하십시오. 명확한 사전식 규칙으로 비교 가능을 구현하거나, 가능한 경우 열거형 항목 순서에 의존하십시오.
자주 묻는 질문
“Hashable/Equatable/Comparable 파생” 강의는 무료인가요?
네 — “Hashable/Equatable/Comparable 파생” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
“Hashable/Equatable/Comparable 파생”에서 뭘 배우나요?
간단한 구조체와 열거형에 대해 Swift가 Equatable/Hashable(및 Codable)을 synthesize 하도록 하고, 필요할 때 사용자 지정 Comparable (사전식)과 수동 hash(into:) 를 구현합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 3번째 강의입니다.
“Hashable/Equatable/Comparable 파생” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 연산자 오버로딩과 우선순위 그룹
- 서브스크립트와 사용자 지정 인덱스 다시 보기
- Hashable/Equatable/Comparable 파생