🔥 메서드 정의하기
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 언어에서는 타입에 메서드를 정의할 수 있어 객체 지향 프로그래밍의 일부 기능을 사용할 수 있습니다. 메서드를 정의할 때는 리시버를 명시해야 하며, 리시버는 메서드가 속한 타입의 변수가 됩니다.
위 다이어그램은 Vertex
타입에 Abs
메서드가 정의되는 과정을 나타냅니다. Abs
메서드는 리시버 v
를 통해 Vertex
타입의 필드에 접근하여 벡터의 길이를 계산하고 결과를 반환합니다.
Go 언어에서 메서드를 정의하는 방법을 이해하면 코드의 가독성과 재사용성을 높일 수 있습니다. 타입에 관련된 동작을 메서드로 묶어 표현할 수 있어 코드의 구조를 명확하게 만들 수 있지요.