구조체 메서드 정의하기
Coddy GO 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 107개 중 7번째.
Go의 메서드는 함수를 구조체 타입과 연결하는 특별한 수신자(receiver) 인자를 가진 함수입니다.
메서드 구문
func (receiverName StructType) MethodName() ReturnType {
// 메서드 본문
}메서드를 포함한 구조체 정의하기
type Rectangle struct {
Width float64
Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
func (r Rectangle) Perimeter() float64 {
return 2 * (r.Width + r.Height)
}매개변수가 있는 메서드
func (r Rectangle) Scale(factor float64) float64 {
return r.Area() * factor
}메서드 호출하기
rect := Rectangle{Width: 5, Height: 3}
fmt.Println(rect.Area()) // 출력: 15
fmt.Println(rect.Perimeter()) // 출력: 16
fmt.Println(rect.Scale(2)) // 출력: 30리시버 (r Rectangle)은 리시버 변수 r을 사용하여 메서드 내부에서 구조체의 필드에 접근할 수 있게 해줍니다. 메서드는 동일한 구조체의 다른 메서드를 호출할 수 있습니다.
챌린지
중급Circle 구조체에 세 개의 메서드를 추가하세요:
Area—math.Pi * radius * radius를 반환합니다Circumference—2 * math.Pi * radius를 반환합니다Describe— 문자열을 반환합니다:"Circle with radius X.XX"
치트 시트
Go의 메서드는 함수를 구조체 타입과 연결하는 특별한 수신자(receiver) 인수를 가진 함수입니다.
메서드 구문:
func (receiverName StructType) MethodName() ReturnType {
// 메서드 본문
}구조체와 메서드 예제:
type Rectangle struct {
Width float64
Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
func (r Rectangle) Perimeter() float64 {
return 2 * (r.Width + r.Height)
}메서드는 매개변수를 받을 수 있습니다:
func (r Rectangle) Scale(factor float64) float64 {
return r.Area() * factor
}메서드 호출:
rect := Rectangle{Width: 5, Height: 3}
fmt.Println(rect.Area()) // 출력: 15
fmt.Println(rect.Perimeter()) // 출력: 16
fmt.Println(rect.Scale(2)) // 출력: 30수신자를 통해 메서드 내부에서 구조체의 필드에 접근할 수 있습니다. 메서드는 동일한 구조체의 다른 메서드를 호출할 수 있습니다.
직접 해보기
package main
import "fmt"
func main() {
var radius float64
fmt.Scan(&radius)
c := Circle{Radius: radius}
fmt.Printf("Area: %.2f\n", c.Area())
fmt.Printf("Circumference: %.2f\n", c.Circumference())
fmt.Printf("Description: %s\n", c.Describe())
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
8에러 처리와 OOP
error 인터페이스사용자 정의 에러 타입에러 래핑 (fmt.Errorf)센티넬 에러errors.Is()와 errors.As()Panic, Defer, Recover요약 - 파일 파서