연산자 - 사용자 정의 연산자

hoBahk·2021년 6월 24일
0

1. 전위 연산자 (prefix)

연산자가 피연산자 앞에 위치하는 연산자
ex) !A

1) 전위 연산자 정의와 구현

prefix operator **

ex) 전위 연산자의 구현과 사용

prefix operator **

prefix func ** (value: Int) -> Int{
    return value * value
}

let minusFive: Int = -5
let sqrtMinusFive: Int = **minusFive

print(sqrtMinusFive) // 25

ex) 전위 연산자 함수 중복 정의와 사용

prefix func ! (value: String) -> Bool{
    return value.isEmpty
}

var stringValue: String = "tomato"
var isEmptyString: Bool = !stringValue

print(isEmptyString) // false

stringValue = ""
isEmptyString = !stringValue

print(isEmptyString) // true

ex) 사용자 정의 전위 연산자 함수 중복 정의와 사용

prefix operator **

prefix func ** (value: String) -> String{
    return value + " " + value
}

let resultString: String = **"tomato"
print(resultString) //tomato tomato

2. 중위 연산자 (infix)

피연산자 뒤에 위치하는 연산자
ex) A + B

1) 중위 연산자 정의와 구현

infix operator ** : MultiplicationPrecedence
// MultiplicationPrecedence를 명시해주지 않는다면 DefaultPrecedence 그룹으로 자동 지정된다.

ex)전위 연산자의 구현과 사용

import Foundation
// String 타입의 contains(_:) 메서드를 사용하기 위해 Foundation 프레임워크를 임포트

infix operator ** : MultiplicationPrecedence

func ** (lhs: String, rhs: String) -> Bool {
    return lhs.contains(rhs)
}// lhs.contains(rhs): lhs 문자열에 rhs 문자열이 포함되어 있다면 true 반환

let helloPark: String = "Hello park"
let park: String = "park"
let isContainsPark: Bool = helloPark ** park //ture

ex) 클래스 및 구조체의 비교 연산자 구현

class Car{
    var modelYear: Int?
    var modelName: String?
}

struct SmartPhone{
    var company: String?
    var model: String?
}

func == (lhs: Car, rhs: Car) -> Bool{
    return lhs.modelName == rhs.modelName
}

func == (lhs: SmartPhone, rhs: SmartPhone) -> Bool{
    return lhs.model == rhs.model
}

let myCar = Car()
myCar.modelName = "S"

let yourCar = Car()
yourCar.modelName = "S"

var myPhone = SmartPhone()
myPhone.model = "SE"

var yourPhone = SmartPhone()
yourPhone.model = "6"

print(myCar == yourCar)
print(myPhone == yourPhone)

ex) 타입 메서드로 구현된 사용자 정의 비교 연산자

class Car{
    var modelYear: Int?
    var modelName: String?
    
    static func == (lhs: Car, rhs: Car) -> Bool{
        return lhs.modelName == rhs.modelName
    }
}

struct SmartPhone{
    var company: String?
    var model: String?
    
    static func == (lhs: SmartPhone, rhs: SmartPhone) -> Bool{
        return lhs.model == rhs.model
    }
}

3. 후위 연산자 (postfix)

피연산자 뒤에 위치하는 연산자
ex) 0!

1) 후위 연산자 정의와 구현

postfix operator **

ex) 사용자 정의 후위 연산자 정의와 함수 구현

postfix operator **

postfix func ** (value: Int) -> Int{
    retrun value + 10
}

let five: Int = 5
let fivePlusTen: Int = five**

print(fivePlusTen)//15

ex) 전위 연산자와 후위 연산자의 동시 사용

//하나의 피연산자에 전위 연산과 후위 연산을 한 줄에 사용하게 되면 후위 연산을 먼저 수행한다.
prefix operator **
postfix operator **

prefix func ** (value: Int) -> Int{
    return value * value
}

postfix func ** (value: Int) -> Int{
    return value + 10
}

let five: Int = 5
let sqrtFivePlusTen: Int = **five**

print(sqrtFivePlusTen) // 225 = (5 + 10) * (5 + 10)
profile
호박에 줄 그어서 수박 되는 성장 드라마

0개의 댓글