이 포스트는 야곰님의 Swift 프로그래밍 2판을 보고 스스로 공부한 내용을 정리한 포스트 입니다.



참고 자료


사용자정의 연산자 (Custom Operators)

  • 스위프트에서는 사용자(프로그래머)의 입맛에 맞게 연산자 역활을 부여할 수 있다.

  • 또, 기존에 존재하지 않던 연산자 기호를 만들어 추가할 수도 있다.

    • 그러나 '할당 연산자(=)'와 '삼항 연산자(?:)'는 사용자정의 역활을 부여할 수 없다.
  • 우선 기존 연산자의 역활을 변경하거나 새로운 역활을 추가하기 위해서기존의 연산자가 '전위 연산자인지', '중위 연산자인지', '후위 연산자'인지 알아야 한다.

    • 전위 연산자는 연산자가 피연산자 앞에 위치하는 연산자를 뜻한다.

      • 대표적인 예로 부울 부정 논리연산(NOT) 연산자(!)가 있다

      • Ex) !A

    • 중위 연산자는 피연산자 사이에 위치하는 연산자를 뜻한다.

      • 많은 수의 연산자가 여기에 속한다

      • Ex) A + B

    • 후위 연산자는 피연산자 뒤에 위치하는 연산자를 뜻한다.

      • 대표적인 예로 옵셔널 강체 추출 연산자 등이 있다.

      • Ex) O!

  • 전위 연산자를 뜻하는 키워드는 'prefix' 이다.

  • 중위 연산자를 뜻하는 키워드는 'infix' 이다.

  • 후위 연산자를 뜻하는 키워드는 'postfix' 이다.

  • 'operator'라는 키워드는 연산자임을 뜻한다.

  • 'associativity'는 연산자 결합방향을 뜻한다.

  • 'precedence'라는 키워드는 우선순위를 뜻한다.

  • 사용자정의 연산자는 아스키(ASCII) 문자 (/, =, -, +, !, *, %, <, >, &, |, ^, ?, ~ )를 결합해서 사용한다.

  • 마침표(.)를 사용자정의 연산자에 사용할 수 있다.

    • 다만 마침표를 사용자정의 연산자에 사용할 때 주의점이 있다. 연산자를 표현하는 문자 중 맨 처음의 문자가 마침표일 때만 연산자에 포함된 마침표가 연산자로 인식된다.

      • 예를 들어 ‘.+.’ 처럼 사용할 수 있다.
    • 만약 마침표로 시작되지 않는 연산자에 마침표가 들어가게 되면 이를 인식할 수 없다.

      • 예를 들어 ‘+.+’의 경우에는 ‘+’ 연산자와 ‘.+’ 연산자를 사용한 것으로 인식된다.
  • 물음표(?)도 사용자정의 연산자에 포함시킬 수 있지만 물음표 자체만으로는 사용자정의 연산자를 정의할 수 없다.

  • 더불어 사용자정의 연산자에 느낌표(!)도 같은 조건으로 포함시킬 수 있다.

  • 단, 전위 연산자는 물음표나 느낌표로 시작하는 사용자정의 연산자를 정의할 수 없다.

  • 토큰으로 사용되는 =, ->, //, /*, */, .과 전위 연산자 <, &, ?, 중위 연산자 ?, 후위 연산자 >, !, ? 등은 이미 스위프트에서 예약한 상태이기 때문에 재정의할 수 없으며 사용자정의 연산자로 사용될 수도 없다.