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

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(트라이) 자료구조 원리와 파이썬 클래스 설계 및 구현 | Trie 자료구조 이야기
트라이(Trie)를 이용한 자동 완성 알고리즘 | Trie 자료구조 이야기
AI는 왜 수백 차원의 벡터를 사용할까? 고차원 공간과 행렬 | 선형대수학
Trie 자료구조 파이썬 구현: Search와 Starts With 연산 | Trie 자료구조 이야기
우리가 매일 쓰는 맞춤법 검사기와 라우터 속에 숨겨진 알고리즘은? | Trie 자료구조 이야기
마지막편, 10억 개 데이터 검색이 0.3ms면 끝나는 이유와 LSM-Tree의 등장
13편, 인덱스가 많으면 왜 느려질까? 쓰기 증폭과 인덱스 튜닝의 이해
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학