고급 연산자 - 연산자 메서드의 직접 구현

velog_ghost·2022년 7월 10일
0

[SeSAC] TIL📚

목록 보기
7/19

연산자 메서드

  • 커스텀 타입에도 메서드 형태로 연산자 (+,-,== 등)을 구현 가능 : 연산자도 사실은 내부적으로 다 구현이 되어있는 타입 메서드임.

  • 연산자 : 타입. 함수이름(파라미터: 타입) 형태로 실행하지 않는 특별한 형태이 타입 메서드임


연산자 메서드의 구현

struct Vector2D {
var x = 0.0
var y = 0.0
}

  • 1) 산술 더하기 연산자의 구현

    extension Vector2D {
        static func + (lhs: Vector2D, rhs: Vector2D) -> Vector2D {
            return Vector2D(x: lhs.x + rhs.x, y: lhs.y + rhs.y)
        }
    }'
    
    let vetoor = Vector2D(x: 3.0, y: 1.0)
    let anotherVector = Vector2D(X: 2.0, y: 4.0)
    
    let combinedVector = vector + anotherVector
  • 2) 단항 prefix 연산자의 구현

     extension Vector2D {
         static prefix func - (vector: Vector2D) -> Vector2D {
              return Vector2D(x: -vector.x, y: -vector.y)
        }
    }
    
    let positive = Vector2D(x: 3.0, y: 4.0)
    let negative = -positive
  • 3) 복합 할당 연산자의 구현

     extension Vector2D {
         static func += (left: inout Vector2D, right: Vector2D) {
              left = left + right
        }
    }
  • 4) 동일 비교 연산자의 구현

     extension Vector2D: Equatable, Comparable {
         static func == (left: Vector2D, right: Vector2D) -> Bool {
              return (left.x == right.x) && (left.y == right.y)
        }
    }      
  • 5) 크기 비교 연산자의 구현

     extension Vector2D: Equatable, Comparable {
         static func < (left: Vector2D, right: Vector2D) -> Bool {
              return (left.x < right.x) && (left.y < right.y)
        }
    }

  

0개의 댓글