문제 설명

전 강의를 유심히 보신 분이라면, 포인터를 인자로 받는 함수는 값(value)을 전달받을 수 없고, 값(value)을 인자로 받는 함수는 포인터를 전달받을 수 없다는 걸 알아채셨을 겁니다.

var v Vertex
ScaleFunc(v)  // 컴파일 에러
ScaleFunc(&v) // 정상

반면에 포인터 리시버는 값(value)과 포인터 모두 접근 가능합니다.

var v Vertex
v.Scale(5)  // 값으로도 접근할 수 있습니다
p := &v
p.Scale(10) // 포인터로도 접근할 수 있습니다

포인터 리시버를 쓰는 이유는 다음과 같습니다.

  1. 메소드 내부에서 리시버가 가리키는 값을 바꾸고 싶다.
  2. 메소드가 호출될 때, 값이 복사(copy)되는 것을 피하고 싶다.

주의 ) value리시버나 포인터 리시버 모두 자유롭게 쓸 수 있지만, 보통 한 메소드 안에서 둘을 한꺼번에 쓰지는 않습니다.

실행 결과 실행 중지