Generic and Custom Operators

2019-06-17
Swift

안녕하세요. 도미닉입니다.

오늘은 Generic 과 Custom Operators 에 대해서 알아보겠습니다.

먼저 Custom Operators 에 대해서 알아보겠습니다.

Custom Operators 란?

한글로 번역하면 사용자 정의 연산자입니다.

한글로 번역해도 도통 무슨 말인지 알아듣기 힘듭니다.

Custom 이라는 단어는 익숙하실 겁니다.

원하는 대로 바꿀 수 있는 것을 커스텀(Custom) 이라고 합니다.

그렇다면 Operator 를 마음대로 바꿀 수 있다고 이해할 수 있습니다.

Operator 란?

한글로 번역하면 연산자입니다.

흔히 사용하는 더하기, 빼기, 나누기, 곱하기를 사칙연산이라고 하죠.

이러한 연산의 종류를 알려주는 것이 연산자입니다.

그렇다면 연산자에는 어떤 종류가 있을까요?

  • infix (중위 연산자): 더하기 연산자 처럼, 두 값 사이에서 사용됩니다(예, 1 + 1).

  • prefix (전위 연산자) : 음수 연산자 처럼, 값의 앞에 추가됩니다(예, -3).

  • postfix (후위 연산자): 강제 언래핑(force-unwrap) 연산자처럼, 값 뒤에 추가 됩니다(예, mayBeNil!).

  • ternary (삼항 연산자): 3개의 값 사이에 삽입된 두개의 기호입니다. Swift에서, 사용자정의 삼항 연산자는 지원되지 않고 내장된 삼항 연산자는 하나있으며, 애플 문서(Apple’s documentation)에서 읽을수 있습니다.

Custom Operator 은 어디에 쓰일까?

보통 직접 만든 타입에서 연산을 할 때 사용한다고 합니다.

일반적으로 쓰이는 연산자들을 Custom Operator 로 사용할 수 있다면 메소드로 만드는 것보다 가독성이 좋을 것입니다.

예를 들어 카드를 비교할 때 isHigherPointThan(cardCompared: Card) 이라고 카드 내에 다른 카드와 비교하는 메소드를 선언하는 것보다 >, < 와 같은 비교 연산자를 사용하는 것이 더 좋을 것 같습니다.

Custom Operator 사용 방법은?

** 이란 곱하기 연산을 수행하는 Custom Operator 를 만들어봤습니다.

infix operator ** : MultiplicationPrecedence

Int 와 Int 사이에 중위 연산자로 예제 소스의 첫번째 줄에서 operator 앞에 infix 를 붙여줍니다.

Multi 연산자의 순서와 동일하기 때문에 MultiplicationPrecedence 를 : 뒤에 붙여줍니다.

이제 3 ** 4 는 정의해준 대로 3 곱하기 4 를 실행한 12 가 됩니다.

Generic 이란?

위와 같이 Int 를 곱해주는 Custom Operator 가 만들어진 후에 Float 도 곱해주어야 한다면 타입 별로 Custom Operator 를 정의해주어야 할까요?

이럴 때 사용할 수 있는 것이 Generic 입니다.

곱해줄 수 있는 타입들에 대해서 모두 동일하게 Custom Operator 가 동작하길 바란다면 위와 같이 작성할 수 있습니다.

<T> 를 함수 이름 뒤에 붙이고 매개변수 또는 리턴 타입에 T 를 작성하게 되면은 해당되는 T 는 모두 동일한 타입이어야 합니다.

이 때 where 을 사용하면 위에서 선언한 Multipleiable 프로토콜을 따르는 타입만 받을 수 있습니다.

위에 두가지는 똑같이 동작합니다.

이런 식으로 제널릭을 사용할 수 있습니다.

정리

Generic 과 Custom Operators 에 대해서 알아봤습니다.

아직 사용한 적은 없지만 사용할 수 있는 기회가 온다면 놓치지 않고 사용하도록 준비해야겠습니다.

글 읽어주셔서 감사합니다.

참고

https://kka7.tistory.com/73 [때로는 까칠하게..]