0Pricing
Swift Academy · 강의

조건부 준수

where 절을 사용해 제네릭 형이 조건에 따라 프로토콜을 준수하도록 만듭니다.

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

소개

조건부 프로토콜 준수를 사용하면 제네릭 타입의 타입 매개변수가 특정 제약 조건을 충족할 때만 해당 타입이 프로토콜을 준수하게 만들 수 있습니다. 이는 Swift 타입 시스템의 표현력을 구성하는 핵심 요소입니다.

기본 조건부 프로토콜 준수

```swift extension Array: Equatable where Element: Equatable { // Array is Equatable only when Element is Equatable } let a = [1,2,3] let b = [1,2,3] print(a == b) // true — works because Int is Equatable ```

사용자 정의 제네릭 타입

```swift struct Box { var value: T } extension Box: Equatable where T: Equatable { static func == (lhs: Box, rhs: Box) -> Bool { lhs.value == rhs.value } } print(Box(value: 42) == Box(value: 42)) // true ```

조건부 Hashable 준수

```swift extension Box: Hashable where T: Hashable { func hash(into hasher: inout Hasher) { hasher.combine(value) } } // Box is Hashable; Box is not ```

조건부 Codable 준수

```swift extension Box: Codable where T: Codable {} let box = Box(value: "hello") let data = try JSONEncoder().encode(box) // works — String is Codable ```

확장의 where 절

```swift extension Collection where Element == Int { var sum: Int { reduce(0, +) } } print([1,2,3,4].sum) // 10 // This extension only applies to collections of Int ```

여러 제약 조건

```swift extension Dictionary where Key: Comparable, Value: Equatable { func sortedByKey() -> [(Key, Value)] { sorted { $0.key < $1.key } } } ```

프로토콜 조건부 준수

```swift protocol Printable { func prettyPrint() } extension Optional: Printable where Wrapped: Printable { func prettyPrint() { switch self { case .none: print("nil") case .some(let v): v.prettyPrint() } } } ```

조건부 준수 사용하기

```swift let opt: Int? = 42 // If Int conformed to Printable: // opt.prettyPrint() // "42" // Standard usage: let nums = Optional([1,2,3]) // [1,2,3]? if let arr = nums, arr == [1,2,3] { ... } // Equatable via conditional ```

소급 준수 경고

스위프트 5.7 이상에서는 소급 준수(다른 모듈의 타입에 준수를 추가하는 것)에 대해 경고합니다: ```swift extension String: SomeThirdPartyProtocol {} // ⚠️ retroactive ``` 의도한 경우 `@retroactive`로 명시적으로 표시합니다.

빠른 확인

조건부 준수 확장에서 조건을 도입하는 키워드는 무엇인가요?

복습

핵심 내용: • `extension T: Protocol where Param: Constraint` — 조건부 준수 • 배열, 옵셔널, 결과 타입 등은 동등성 비교 가능, 해시 가능, 코드화 가능 프로토콜에 이 기능을 사용합니다 • 사용자 지정 제네릭 타입도 같은 방식을 사용할 수 있습니다 • `where Element == Int`는 특정 구체 타입으로 제한합니다 • 스위프트 5.7 이상에서는 소급 준수에 `@retroactive`가 필요합니다 다음: 자기 자신 타입 요구 사항

자주 묻는 질문

“조건부 준수” 강의는 무료인가요?

네 — “조건부 준수” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“조건부 준수”에서 뭘 배우나요?

where 절을 사용해 제네릭 형이 조건에 따라 프로토콜을 준수하도록 만듭니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Swift Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“조건부 준수” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. &를 사용한 프로토콜 조합
  2. 조건부 준수
  3. Self 요구 사항과 Equatable 설계
  4. 프로토콜 중심 설계 원칙
← Swift Academy(으)로 돌아가기