🔥 메서드 정의하기

215자
3분

Go 언어는 클래스가 없지만, 타입에 메서드를 정의할 수 있습니다. 메서드는 특별한 리시버 인자를 가지는 함수입니다. 리시버는 func 키워드와 메서드 이름 사이에 자체 인자 목록에 나타납니다.

다음 예제에서 Abs 메서드는 Vertex라는 이름의 v 타입의 리시버를 가집니다.

go
package main
 
import (
	"fmt"
	"math"
)
 
type Vertex struct {
	X, Y float64
}
 
// Abs 메서드를 Vertex 타입에 정의합니다.
func (v Vertex) Abs() float64 {
	// math.Sqrt 함수를 사용하여 벡터의 길이를 계산합니다.
	return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
 
func main() {
	// Vertex 타입의 변수 v를 선언하고 초기화합니다.
	v := Vertex{3, 4}
 
	// v.Abs() 메서드를 호출하여 결과를 출력합니다.
	fmt.Println(v.Abs())
}
 
go
package main
 
import (
	"fmt"
	"math"
)
 
type Vertex struct {
	X, Y float64
}
 
// Abs 메서드를 Vertex 타입에 정의합니다.
func (v Vertex) Abs() float64 {
	// math.Sqrt 함수를 사용하여 벡터의 길이를 계산합니다.
	return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
 
func main() {
	// Vertex 타입의 변수 v를 선언하고 초기화합니다.
	v := Vertex{3, 4}
 
	// v.Abs() 메서드를 호출하여 결과를 출력합니다.
	fmt.Println(v.Abs())
}
 

위 코드에서 Vertex 타입을 정의하고, 이 타입에 Abs 메서드를 정의했습니다. Abs 메서드는 Vertex 타입의 리시버 v를 가지며, 벡터의 길이를 계산하여 반환합니다.

main 함수에서는 Vertex 타입의 변수 v를 선언하고 {3, 4}로 초기화합니다. 그리고 v.Abs() 메서드를 호출하여 결과를 출력합니다.

이처럼 Go 언어에서는 타입에 메서드를 정의할 수 있어 객체 지향 프로그래밍의 일부 기능을 사용할 수 있습니다. 메서드를 정의할 때는 리시버를 명시해야 하며, 리시버는 메서드가 속한 타입의 변수가 됩니다.

위 다이어그램은 Vertex 타입에 Abs 메서드가 정의되는 과정을 나타냅니다. Abs 메서드는 리시버 v를 통해 Vertex 타입의 필드에 접근하여 벡터의 길이를 계산하고 결과를 반환합니다.

Go 언어에서 메서드를 정의하는 방법을 이해하면 코드의 가독성과 재사용성을 높일 수 있습니다. 타입에 관련된 동작을 메서드로 묶어 표현할 수 있어 코드의 구조를 명확하게 만들 수 있지요.

YouTube 영상

채널 보기
AI에서 선형대수학이 중요한 이유
AI를 위한 선형대수 - 전단, 행렬식, 변환의 핵심
AI는 데이터를 어떻게 분류할까? 벡터의 거리와 KNN 알고리즘 | 선형대수학
5편, B-Tree 내부 노드에서 키를 삭제할 때 정렬 규칙을 지키는 방법
Trie 자료구조 파이썬 구현: Search와 Starts With 연산 | Trie 자료구조 이야기
밑바닥부터 배우는 컴퓨터 구조 - 트랜지스터에서 CPU까지
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학
Trie 자료구조 완전 정복 - 개념부터 시각화까지 | Trie 자료구조 이야기