🔥 메서드는 리시버를 가진 함수

200자
3분

Go 언어에서 메서드(method)는 리시버(receiver) 인자를 가지는 함수(function)에 불과해요. 메서드를 일반 함수로 작성해도 기능상 차이가 없죠.

아래 코드는 Abs 메서드를 일반 함수로 작성한 예시예요.

package main
 
import (
	"fmt"
	"math"
)
 
type Vertex struct {
	X, Y float64
}
 
// Abs 함수는 Vertex 타입을 인자로 받아 절대값을 반환해요.
func Abs(v Vertex) float64 {
	// math.Sqrt 함수를 사용하여 X와 Y 좌표 값을 제곱한 합의 제곱근을 구해요.
	return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
 
func main() {
	// Vertex 구조체를 생성하고 X는 3, Y는 4로 초기화해요.
	v := Vertex{3, 4}
 
	// Abs 함수를 호출하여 v의 절대값을 출력해요.
	fmt.Println(Abs(v))
}
 
go

위 코드를 단계별로 살펴볼게요.

  1. Vertex 구조체를 정의해요. 이 구조체는 X와 Y 좌표 값을 가지고 있죠.
  2. Abs 함수를 정의해요. 이 함수는 Vertex 타입을 인자로 받아 절대값을 반환하는 역할을 해요.
    • math.Sqrt 함수를 사용하여 X와 Y 좌표 값을 제곱한 합의 제곱근을 구하죠.
  3. main 함수에서는 Vertex 구조체를 생성하고 X는 3, Y는 4로 초기화해요.
  4. Abs 함수를 호출하여 v의 절대값을 출력해요.

이렇게 메서드를 일반 함수로 작성해도 기능상 차이가 없다는 걸 알 수 있어요. 메서드는 리시버 인자를 통해 특정 타입과 연결되는 반면, 함수는 독립적으로 존재하죠.

Go 언어에서는 메서드와 함수를 적절히 사용하여 코드의 가독성과 유지보수성을 높일 수 있어요. 상황에 맞게 메서드와 함수를 선택하는 것이 중요하답니다.