밤에 쓴 코드

Swift) 사용자 정의 연산자 본문

Swift

Swift) 사용자 정의 연산자

붱이🦉 2019. 6. 17. 15:34

사용자 정의 연산자


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() 메소드의 인터페이스를 보자

스크린샷 2019-06-17 오후 3 19 06

sorted() 메소드는 인자로 (Int, Int) -> Bool 형태의 클로저를 요구하는 메소드이다.

>가 저 위치에 들어가는 건 아마도 >연산자가 함수로 저런 형태를 띄는게 아닐까? 추측해볼 수 있다.

아니나 다를까

스크린샷 2019-06-17 오후 3 29 58

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
Comments