GO · 기초 문법
구조체 메서드
구조체에 메서드를 정의하여 객체지향 스타일로 코드를 작성합니다. 값 리시버와 포인터 리시버의 차이를 이해합니다.
기초 문법중급methodreceiverpointer-receivervalue-receiver
핵심 설명
구조체에 메서드를 정의하여 객체지향 스타일로 코드를 작성합니다. 값 리시버와 포인터 리시버의 차이를 이해합니다.
Go code
package main
import "fmt"
type Rect struct {
Width, Height float64
}
// 값 리시버 — 원본 변경 불가
func (r Rect) Area() float64 {
return r.Width * r.Height
}
// 포인터 리시버 — 원본 수정 가능
func (r *Rect) Scale(factor float64) {
r.Width *= factor
r.Height *= factor
}
func (r Rect) String() string {
return fmt.Sprintf("Rect(%.1f x %.1f)", r.Width, r.Height)
}
func main() {
r := Rect{Width: 3, Height: 4}
fmt.Println(r.Area()) // 12
r.Scale(2)
fmt.Println(r) // Rect(6.0 x 8.0)
}학습 팁
하나의 메서드라도 포인터 리시버를 사용하면, 일관성을 위해 모든 메서드를 포인터 리시버로 통일하는 것이 관례입니다.
주의할 점
값 리시버 메서드에서 필드를 수정해도 원본에 반영되지 않습니다. 수정이 필요하면 반드시 포인터 리시버를 사용하세요.
자주 묻는 질문
구조체 메서드란 무엇인가요?
구조체에 메서드를 정의하여 객체지향 스타일로 코드를 작성합니다. 값 리시버와 포인터 리시버의 차이를 이해합니다.
구조체 메서드 학습 시 주의할 점은 무엇인가요?
값 리시버 메서드에서 필드를 수정해도 원본에 반영되지 않습니다. 수정이 필요하면 반드시 포인터 리시버를 사용하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.