PHpullh
학습 라이브러리/Go/구조체 메서드

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)
}

학습 팁

하나의 메서드라도 포인터 리시버를 사용하면, 일관성을 위해 모든 메서드를 포인터 리시버로 통일하는 것이 관례입니다.

주의할 점

값 리시버 메서드에서 필드를 수정해도 원본에 반영되지 않습니다. 수정이 필요하면 반드시 포인터 리시버를 사용하세요.

자주 묻는 질문

구조체 메서드란 무엇인가요?

구조체에 메서드를 정의하여 객체지향 스타일로 코드를 작성합니다. 값 리시버와 포인터 리시버의 차이를 이해합니다.

구조체 메서드 학습 시 주의할 점은 무엇인가요?

값 리시버 메서드에서 필드를 수정해도 원본에 반영되지 않습니다. 수정이 필요하면 반드시 포인터 리시버를 사용하세요.