일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 함수형패러다임
- iOS프로그래밍
- POP
- 협업
- 이름
- 네이밍
- 인터페이스
- 함수형프로그래밍
- fp
- DesignPattern
- 클린소프트웨어
- 객체지향프로그래밍
- 개발
- OOP
- 디자인패턴
- 문법
- 고차함수
- 아이폰프로그래밍
- IOS
- protocol
- 의도
- Solid
- 개발자
- 부스트코스
- CleanCode
- SWIFT
- 클린코드
- Swfit
- interface
- 의존성
- Today
- Total
밤에 쓴 코드
Swift) 사용자 정의 연산자 본문
사용자 정의 연산자
Swift
기본연산자< . > , ! , = , …
연산을 기호화하여 기호형태로 연산자 들을 지원한다.함수도 하나의 연산이다. 함수를 연산자의 형태로 표현할 수도 있지 않을까?
사용자정의 연산자를 정의함으로써, 커스텀메소드를 부호화 할 수있다.
Swift
에서는 증감연산자를 기본적으로 지원하지는 않는다.
하지만 타 언어 ( Java,C++,…) 에서는 a++ , a—-
형태로 증감연산자를 지원한다.
하지만 Swift
에서도 사용자가 정의하여서 사용할 수 있다.
extension Int {
mutating func increase() {
self+=1
}
mutating func decrease() {
self-=1
}
}
위와 같이 Int
구조체를 확장하였다.
var number: Int = 1
number.increase() // 2
number.decrease() // 1
이런식으로 함수로 연산을 실행할 수 있는 데 ,
위의 함수를 기호화해서 연산자로 표현할 수 있습니다.
postfix func ++ (number: inout Int) {
number.increase()
}
postfix func -- (lhs: inout Int) {
number.decrease()
}
위와 같이 함수를 기호 정의함으로써
number++ // 2
number-- // 1
증감연산자를 사용할 수 있게 되었다.
커스텀연산자의 정의부를 보면 func인걸 알 수 있다.
연산자도 하나의 함수를 부호화한 것이기 때문이다.
var array = [4,5,3,1,2]
array.sorted(by:<) // [1,2,3,4,5]
연산자를 함수로써 바라보면 위와 같은 코드를 이해하는 데 도움이 될 것같다.
Array
에 정의되어 있는 sorted()
메소드의 인터페이스를 보자
sorted()
메소드는 인자로 (Int, Int) -> Bool
형태의 클로저를 요구하는 메소드이다.
>
가 저 위치에 들어가는 건 아마도 >
연산자가 함수로 저런 형태를 띄는게 아닐까? 추측해볼 수 있다.
아니나 다를까
Swift 기본라이브러리
의 Int
구조체의 <
연산자가 위에서 요구하는 함수으 형태를 띄고있다.
연산자는 함수의 일종의 기호화된 표현이고, 이건 사용자가 정의할 수 있다.
우리가 흔히 사용하는 연산자들은 엄청 많은 기본타입에서 사용할 수 있다.
지금 만든 연산자는 Int 형에서만 사용할 수있다.
애플에서는 어떤식으로 구현되어 있을까??
답은 제네릭에서 알아볼 것이다.
'Swift' 카테고리의 다른 글
Swifty Tips ⚡️ (0) | 2019.10.24 |
---|---|
Swift ) 제네릭 (0) | 2019.06.17 |
Swift) Closure - 클로저 (0) | 2019.05.08 |
Swift) POP - Protocol Oriented Programming (1) | 2019.04.25 |
Swift) Extension - 익스텐션 (0) | 2019.04.25 |