swift 기본문법 - 사용자정의 연산자(Custom Operators)

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.


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

Swift는 사용자가 원하는 동작을 하는 연산자를 생성할 수 있다. 그렇기에 Swift에서 연산자는 부호로 표현하는 함수라고 할 수있다.

연산자의 종류

Swift의 연산자는 총 3 종류로 전위, 중위, 후위로 구성

1.전위 연산자: 연산자가 피연산자 앞에 위치하는 연산자

// 대표적인 예) 논리 부정 연산자
a = !a

2.중위 연산자: 연산자가 두 피연산자 사이에 위치하는 연산자

// 대표적인 예) 기본적인 연산자들
a + b
a += b
a - b

3.후위 연산자: 연산자가 피연산자 뒤에 위치하는 연산자

// 대표적인 예) 옵셔널 관련 연산자
a?
a!

연산자는 /, =, -, +, _, %, <, >, &, |, ^, ?, ~ 를 결합하여 만들 수 있다.

마침표(.)을 이용하여 사용자를 만들수 있지만 연산자 문자 중 맨 처음 문자가 마침표여야 하며 .+.는 사용 가능하지만 +.+와 같이 선언하면 +와 .+연산자 로 나누어 인식하게 된다. 물음표와 느낌표는 연산자에 포함 가능하지만 자체적으로 재정의는 불가능하다.

토큰 =. ->, //, /_, */전위 연산자 <, &, ? 중위 연산자 ? 후위 연산자 >, !, ? 역시 재정의가 불가능

전위 연산자

전위 연산자를 구현하기 위해 prefix라는 키워드를 사용

// 연산자를 구현하기 위해 미리 선언
prefix operator **

// 제곱을 수행하는 연산자를 정의
prefix func ** (num: Int) -> Int{
    return num * num
}
print(**100)
// 10000

위의 연산자를 재정의 하지 않고 기능만 추가하려면 연산자를 선언하지 말고 함수를 overload

//논리 부정 연산자를 String에서도 사용 가능하도록 기능을 추가
prefix func ! (str: String) -> Bool{
    return str.isEmpty()
}
// !을 통해 String의 값이 비었는지 확인 가능
print(!"")
// true

후위 연산자

후위 연산자를 구현하기 위해 postfix라는 키워드를 사용

postfix operator ++
// 전위와 같이 연산자를 구현하기 위해 미리 선언

// 값에 1을 더하는 연산자를 만든다
postfix func ++ (num: Int) -> Int{
    return num + 1
}
print(1++)
// 2

하나의 피연산자에 전위와 후위를 한 줄에 사용하게 되면 후위가 먼저 실행

print(**10++)
// (11) * (11)
// 121

중위 연산자

중위 연산자의 종류는 다양하다. 그렇기에 중위 연산자는 특별히 우선순위를 가지는데, 중위 연산자의 우선순위는 더 높은 우선순위, 더 낮은 우선순위, 결합방향, 할당방향을 명시하며 중위 연산자에 우선순위를 명시하지 않으면 우선순위가 가장 높은 DefalutPrecedence그룹이 할당된다.

infix operator <=
// 연산자를 미리 선언

// 서로의 문자의 수를 비교하는 연산자
func <= (str1: String, str2: String) -> Bool{
    return str1.size <= str2.size
}
print( "hello" <= "nice" )
// false