정의가 없을 때
Point p1
+
Point p2
// 컴파일 오류: Point에 대한 + 규칙을 모름
컴파일러가 모르는 Point + Point의 의미를 operator 함수로 알려 주면, 객체도 기본 타입처럼 자연스러운 표현식에 참여할 수 있다.
// 컴파일 오류: Point에 대한 + 규칙을 모름
return Point(x + other.x, y + other.y);
p1.add(p2)보다 p1 + p2가 좌표 덧셈 의도를 짧고 분명하게 드러낸다.
멤버 함수는 왼쪽 객체를 this로 보고, 오른쪽 객체 하나를 인자로 받는다.
연산자의 일반 의미를 뒤집으면 직관성이 사라져 오히려 읽기 어려워진다.
연산자를 추가하기 전에 그 기호가 타입의 도메인에서 자연스러운 말인지, 원본을 바꿔야 하는지, 새 값을 반환해야 하는지를 먼저 정한다.