swift) where 키워드

2024. 1. 18. 20:53· Swift🐤
목차
  1. 제네릭 타입에서 where  키워드사용
  2. extenstion 사용 시 where 키워드 사용

오늘은 swift에서 where라는 키워드에 대해서 공부해보겠습니다. 

where 키워드는 제네릭 타입이나 extension에서 사용되어 특정 제약을 지정하는 데에 활용됩니다. 

여기서 특정 제약이라고 하는 것을 예시를 통해 설명하겠습니다.

 

제네릭 타입에서 where  키워드사용

설명을 위해 제네릭 함수를 가져왔습니다.

func printIfEqual<T>(value1: T, value2: T) {
    if value1 == value2 {
    //error: "Binary operator '==' cannot be applied to two 'T' operands"
    
        print("\(value1) is equal to \(value2)")
    } else {
        print("\(value1) is not equal to \(value2)")
    }
}

let a = 5
let b = 5
let c = "Hello"
let d = "World"

위에 코드에서는 '==' 연산자는 두개의 T타입을 가진 피연산자에 적용할 수 없다는 에러 메시지가 나타났습니다.

'==' 연산자를 사용하기 위해서는 해당 타입들은 Equatable 프로토콜을 채택해야합니다. 

 

func printIfEqual<T>(value1: T, value2: T) where T: Equatable {
    if value1 == value2 {
        print("\(value1) is equal to \(value2)")
    } else {
        print("\(value1) is not equal to \(value2)")
    }
}

let a = 5
let b = 5
let c = "Hello"
let d = "World"
//Int 혹은 String 타입은 이미 Equatable 프로토콜을 채택하고 있습니다.

printIfEqual(value1: a, value2: b) // 출력: 5 is equal to 5
printIfEqual(value1: c, value2: d) // 출력: Hello is not equal to World

where 키워드를 사용함으로써 T의 타입에 조건을 걸어줍니다. 제네릭 T가 프로토콜 Equtable을 채택하였다는 조건을 걸어줍니다.

"제네릭 타입T가 Equatable 을 채택하였다고 가정하고... 아래 코드를 진행합니다."

다르게 말하자면, "제네릭 타입T가 Equatable 프로토콜을 준수하는 경우에만 아래 코드를 진행합니다."

 

이후에 Int 타입, String 타입을 가진 변수를 해당 함수의 인자로 사용합니다. Int 타입과 String 타입은 이미 Equatable 프로토콜을 채택하고 있어 where 조건에 부합하여 아래 코드를 실행하게 됩니다.

extenstion 사용 시 where 키워드 사용

extension Array where Element: Numeric {
    func sum() -> Element {
        return reduce(0, +)
    }
}

let numbers = [1, 2, 3, 4, 5]
let result = numbers.sum()
print("Sum of numbers: \(result)") // 출력: Sum of numbers: 15

위의 예제에서 where Element: Numeric는 배열의 요소 타입이 Numeric 프로토콜을 준수하는 경우에만 sum() 메서드가 동작하도록 제약을 걸어줍니다.

'Swift🐤' 카테고리의 다른 글

swift) reduce 메소드  (0) 2024.03.17
swift) enumerated() 메소드  (1) 2024.02.07
Swift) 클래스 내부 메소드(method) 종류  (0) 2023.10.10
Swift) 열거형(enum)  (1) 2023.10.09
Swift) Nested Function  (0) 2023.09.06
  1. 제네릭 타입에서 where  키워드사용
  2. extenstion 사용 시 where 키워드 사용
'Swift🐤' 카테고리의 다른 글
  • swift) reduce 메소드
  • swift) enumerated() 메소드
  • Swift) 클래스 내부 메소드(method) 종류
  • Swift) 열거형(enum)
성실농장주
성실농장주
매일 조금이라도 꾸준히 성장하고 싶은 개발자
성실농장주
사과농장
성실농장주
전체
오늘
어제
  • 분류 전체보기 (43)
    • iOS 개발공부📱 (4)
    • Swift🐤 (12)
    • SwiftUI🐧 (2)
    • Firebase 🔥 (1)
    • Git 🐈 (2)
    • Linux (1)
    • Trouble Shooting🛠️ (2)
    • 자료구조🏛️ (1)
    • visionOS 개발공부👓 (1)
    • Algorithm💡 (4)
    • RxSwift (5)
    • 오픈소스 (1)
    • ios 개발자 면접 질문🥸 (6)
    • 영어문서 단어집📕 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • colorScheme
  • rethrows
  • optional_chaining
  • processor_management
  • EnvironmentValues
  • process_states
  • Tuple
  • iOS_process_management
  • Set
  • RxSwift
  • control_transfer_statement
  • Debug View Hierarchy
  • nested_function
  • process_control_block
  • SWIFT
  • Xcode
  • responder_chain
  • git
  • Array
  • CLLocationDegrees

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
성실농장주
swift) where 키워드
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.