함수의 where 절
제네릭 함수에 세밀한 제약 조건을 추가합니다.
함수의 where 절은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
단순한 제약 조건을 넘어서
<T: Collection>과 같은 제약 조건은 T 자체를 설명합니다. 하지만 때로는 Element와 같은 연관 타입에 제약 조건을 지정해야 합니다. 이때 사용하는 것이 where 절입니다.
func sumInts<C: Collection>(_ c: C) -> Int where C.Element == Int {
c.reduce(0, +)
}
print(sumInts([1, 2, 3]))동일 타입 요구 사항
where C.Element == Int는 컬렉션의 요소가 정확히 Int여야 한다고 요구하므로 정수에 특화된 작업을 수행할 수 있습니다.
func describe<C: Collection>(_ c: C) -> String where C.Element == Int {
"Sum is " + String(c.reduce(0, +))
}
print(describe(Set([1, 2, 3])))요소에 대한 프로토콜 요구 사항
요소가 하나의 정확한 타입이 되도록 요구하는 대신 프로토콜을 준수하도록 요구할 수 있으며, 이 방식이 더 유연합니다.
func joinAll<C: Collection>(_ c: C) -> String
where C.Element: CustomStringConvertible {
c.map { $0.description }.joined(separator: ", ")
}
print(joinAll([1, 2, 3]))조건 절은 시그니처 뒤에 옵니다
where 절은 반환 타입과 함수 본문 사이에 위치합니다. <> 안의 제약 조건과 where 절은 함께 작동합니다.
func maxElement<C: Collection>(_ c: C) -> C.Element?
where C.Element: Comparable {
c.max()
}
print(maxElement([4, 9, 2])!)두 타입 매개변수 연결하기
where 절에서 ==를 사용하여 서로 다른 두 제네릭의 요소 타입을 연결할 수 있습니다.
func combine<A: Collection, B: Collection>(_ a: A, _ b: B) -> [A.Element]
where A.Element == B.Element {
Array(a) + Array(b)
}
print(combine([1, 2], Set([3])))여러 조건 절 조건
여러 요구 사항을 쉼표로 구분하여 나열하면 복합 제약 조건을 표현할 수 있습니다.
func report<C: Collection>(_ c: C)
where C.Element: Comparable, C.Element: CustomStringConvertible {
if let m = c.max() { print("max:", m.description) }
}
report([5, 1, 9])중첩된 연관 타입에 제약 조건 지정하기
중첩 컬렉션을 다룰 때는 더 깊은 타입에도 접근할 수 있습니다. 예를 들어 요소의 요소에 요구 사항을 지정할 수 있습니다.
func flatten<C: Collection>(_ c: C) -> [Int]
where C.Element: Collection, C.Element.Element == Int {
c.flatMap { Array($0) }
}
print(flatten([[1, 2], [3]]))Equatable 요소와 함께 사용하는 조건 절
Equatable 요소를 요구하면 제네릭 컬렉션을 검색할 수 있습니다.
func indexOf<C: Collection>(_ x: C.Element, in c: C) -> C.Index?
where C.Element: Equatable {
c.firstIndex(of: x)
}
if let i = indexOf(2, in: [1, 2, 3]) { print("found") }조건 절을 사용하는 제네릭 메서드
제네릭 타입 내부의 메서드에서도 where를 사용할 수 있으며, 특정 요소 타입에만 동작을 추가할 때 자주 활용합니다.
struct Wrap<T> {
let items: [T]
func total() -> Int where T == Int { items.reduce(0, +) }
}
print(Wrap(items: [1, 2, 3]).total())가독성 향상
복잡한 제약 조건은 꺾쇠괄호 안에 억지로 넣는 것보다 where 절에 작성할 때 더 명확하게 읽힙니다. 연관 타입 조건이 여러 개일 때 특히 그렇습니다.
func first<C: Collection>(_ c: C) -> String
where C.Element: CustomStringConvertible {
c.first.map { $0.description } ?? "empty"
}
print(first([10, 20]))표준 라이브러리의 조건 절
시퀀스의 시퀀스에 사용하는 joined()와 같은 메서드는 내부적으로 where 절을 사용하여 요구 사항을 정확하게 표현합니다.
let nested = [[1, 2], [3, 4]]
print(Array(nested.joined()))빠른 확인
함수의 조건 절에 대한 이해도를 확인해 보십시오.
복습
where 절을 사용하면 제네릭의 연관 타입에 제약 조건을 지정할 수 있습니다. 요소를 특정 타입으로 요구하거나(== Int), 프로토콜을 준수하도록 하거나(: Comparable), 두 매개변수의 요소를 연결하거나, 중첩된 연관 타입까지 접근할 수 있습니다. 조건 절은 시그니처 뒤에 위치하며 복잡한 제약 조건을 읽기 쉽게 만들어 줍니다.
자주 묻는 질문
“함수의 where 절” 강의는 무료인가요?
네 — “함수의 where 절” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“함수의 where 절”에서 뭘 배우나요?
제네릭 함수에 세밀한 제약 조건을 추가합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“함수의 where 절” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 형식 매개변수 제약 조건
- 함수의 where 절
- 연관 형식 제약하기
- 제네릭 서브스크립트와 확장