[Swift] μ°μ°μ ꡬν (Implementing Operator Methods)
μ°λ¦¬κ° μλ μ°μ°μλ€μ λͺ¨λ νμ μ μ§μνμ§λ μμ΅λλ€.
+, -, ,%, /, // λ±
μλ₯Ό λ€λ©΄ 컀μ€ν νμ μ λν΄, μ°λ¦¬λ μ§μ μ°μ°μλ₯Ό ꡬνν΄μΌ ν©λλ€.
κΈ°λ³Έ ν¨ν΄
static func operator (paramters) -> ReturnType {
...
}
operator μλ μ°μ°μκ° λ€μ΄κ°λλ€.
parameters μλ μ°μ°μμ μ κ³Ό λ€μ λΆμ ν(μ’ν, μ°ν νΉμ λ¨ν)λ€μ κ°μ νλΌλ―Έν°λ‘ λ°κ² λ©λλ€.
ReturnType μ μ°μ°κ²°κ³Ό κ°μ νμ μ λλ€. μλ₯Ό λ€μ΄ '==' (equal to) μ°μ°μλΌλ©΄ Boolμ λ°νν κ²μ λλ€.
νμ©
struct Point {
var x: Double
var y: Double
static func ==(lhs: Point, rhs: Point) -> Bool {
return (lhs.x == rhs.x) && (lhs.y == rhs.y)
}
static func *(lhs: Point, rhs: Point) -> Point {
return Point(x: lhs.x * rhs.x, y: lhs.y * rhs.y)
}
static prefix func -(value: Point) -> Point {
return Point(x: -value.x, y: -value.y)
}
static postfix func ++(value: inout Point) -> Point {
let originValue = value
value.x += 1.0
value.y += 1.0
return originValue
}
}
Point λΌλ 컀μ€ν νμ (struct) μ μ¬μ©ν μ μλ μ°μ°μ ( == , * , λ¨νμ°μ°μ -, ννμ°μ°μ ++ ) λ₯Ό ꡬνν΄ λ³΄μμ΅λλ€.
μ½λλ₯Ό 보면 κ°λ¨νκ² μ΄ν΄ν μ μμΌλ―λ‘ μ€λͺ μ μλ΅νκ² μ΅λλ€ !! ππ»
" μ°μ°μλ ν¨μμ λλ€ "
ν¨μλ μΌκΈ κ°μ²΄ μ΄λ―λ‘ λ³μμ μ μ₯, νλΌλ―Έν°λ‘ μ λ¬, λ¦¬ν΄ κ°μΌλ‘ μ¬μ©μ΄ κ°λ₯ν©λλ€.
λνμ μΈ κ³ μ°¨ν¨μμΈ map, filter, reduce λ±μ λλ²μ§Έ νλΌλ―Έν°μ '+', '-' μ κ°μ μ°μ°μλ§ μ λ¬ν μ μλ μ΄μ λ μ°μ°μλ ν¨μμ΄κΈ° λλ¬Έμ λλ€.
λ!