Operator Overloading

사용자 정의 타입에 연산 의미 붙이기

컴파일러가 모르는 Point + Point의 의미를 operator 함수로 알려 주면, 객체도 기본 타입처럼 자연스러운 표현식에 참여할 수 있다.

before

정의가 없을 때

Point p1 + Point p2

// 컴파일 오류: Point에 대한 + 규칙을 모름

after

operator+를 정의할 때

p1 operator+(p2)

return Point(x + other.x, y + other.y);

표현식

p1.add(p2)보다 p1 + p2가 좌표 덧셈 의도를 짧고 분명하게 드러낸다.

위치

멤버 함수는 왼쪽 객체를 this로 보고, 오른쪽 객체 하나를 인자로 받는다.

사용자 정의 타입 점검

연산자의 일반 의미를 뒤집으면 직관성이 사라져 오히려 읽기 어려워진다.

연산자 의미 경계

연산자를 추가하기 전에 그 기호가 타입의 도메인에서 자연스러운 말인지, 원본을 바꿔야 하는지, 새 값을 반환해야 하는지를 먼저 정한다.