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

200자
3분

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

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

go
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
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))
}
 

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

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

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

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

YouTube 영상

채널 보기
트라이(Trie) 자료구조: 파이썬으로 삽입(Insert) 연산 구현하기 | Trie 자료구조 이야기
밑바닥부터 배우는 컴퓨터 구조 - 트랜지스터에서 CPU까지
AI를 위한 선형대수 - 전단, 행렬식, 변환의 핵심
AI를 위한 선형대수, 데이터는 점구름이다
AI에서 고차원 임베딩이 무엇일까?
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학
벡터의 정의와 덧셈 연산 | 선형대수학