🔥 메서드 정의하기

215자
3분

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

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

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

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

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

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

lecture image

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

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