[인터뷰질문 016] operator overloading을 주니어 개발자에게 어떻게 설명해 줄 것 인가요?
오버라이딩 이 문제를 이해하기 위해서는 오버라이딩이라는 개념을 알고 있어야 합니다. 오버라이딩은 쉽게 말해 같은 이름의 다른 타입의 함수를 정의하는 것 입니다. 두개의 인자를 받아서 더하는 함수를 정의해 보겠습니다. func sum(_ a : Int, _ b : Int) -> Int { return a + b } func sum(_ a : Double, _ b : Double) -> Double { return a + b } print (sum( 3 , 2 ) ) // 5 print (sum( 4.1 , 4.2 ) ) // 8.3 두 숫자의 합을 구하고 싶을 때, 매개별수로 정수와 실수가 들어가야 한다면, 이렇게 한 함수를 오버라이딩해서 사용하는 사람이 편하게 쓸 수 있도록 구현할 수 있습니다. 연산자 오버라이딩 이름에서 알 수 있듯이, 연산자를 오버라이딩 하는 것 입니다. 우리가 알고있는 연산자는 다음과 같습니다. + , - , / , * 등등... 그렇다면, 언제 연산자를 오버라이딩 할까요? 아래 예제를 보면서 생각해 보겠습니다. struct Point { var x = 0.0 var y = 0.0 } let p1 = Point(x: 12.3 , y: 34.5 ) let p2 = Point(x: 67.2 , y: 89.6 ) 두개의 좌표가 있을 때, 좌표의 합을 구하고 싶다면, 어떻게 해야할까요? 쉽게드는 생각은 p1 + p2 하면 x는 x끼리 y는 y끼리 더해주었으면 좋겠는데, 실제 돌려보면 binary operator '+' cannot be applied to two 'Point' operands print(p1 + p2) 와 같은 에러가 발생합니다. 왜냐하면 + 연산자는 좌표를 더하는 것에 대한 처리가 되어있지 않기 때문입니다. 그렇다면? 위에서 봤던 예제처럼 연산자를 오버라이딩 하면 문제를 해결할 수 있을것 같습니다. struct Poi