Menu
Coddy logo textTech

구조체 메서드 정의하기

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을 사용하여 메서드 내부에서 구조체의 필드에 접근할 수 있게 해줍니다. 메서드는 동일한 구조체의 다른 메서드를 호출할 수 있습니다.

challenge icon

챌린지

중급

Circle 구조체에 세 개의 메서드를 추가하세요:

  • Areamath.Pi * radius * radius를 반환합니다
  • Circumference2 * 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())
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨