[go] Go 언어에서 메소드와 포인터

Go 언어는 간결하고 효율적인 코드를 작성할 수 있는 매력적인 프로그래밍 언어입니다. Go 언어에서는 메소드와 포인터를 사용하여 객체 지향적인 프로그래밍을 구현할 수 있습니다. 이번 블로그 포스트에서는 Go 언어에서 메소드와 포인터의 사용법에 대해 알아보겠습니다.

메소드

Go 언어에서 메소드는 특정 타입의 객체에 연결된 함수입니다. 메소드를 정의하기 위해서는 함수 이름 앞에 “func” 키워드를 사용하고, 메소드가 속한 타입을 함수 이름 앞에 써줍니다. 메소드의 첫 번째 매개변수는 해당 메소드와 연결된 객체를 가리키는 변수로서, 이 변수를 통해 객체에 접근할 수 있습니다.

type Rectangle struct {
    width, height float64
}

func (r Rectangle) Area() float64 {
    return r.width * r.height
}

위 예제에서는 Rectangle이라는 구조체에 Area라는 메소드를 정의했습니다. Area 메소드는 Rectangle 구조체에 연결된 함수로서, 해당 객체의 너비와 높이를 이용하여 넓이를 계산하여 반환합니다. 메소드를 호출하기 위해서는 객체 뒤에 점(.)을 쓰고 메소드 이름을 적으면 됩니다.

r := Rectangle{width: 10, height: 5}
fmt.Println(r.Area()) // 출력: 50

위 예제에서는 Rectangle 객체를 생성한 후, Area 메소드를 호출하여 객체의 넓이를 계산하고 출력합니다.

포인터

Go 언어에서 포인터는 메모리 주소를 가리키는 변수입니다. 포인터를 사용하여 메소드를 정의하면 메소드가 호출되는 객체를 직접 변경할 수 있습니다. 이를 통해 메소드가 호출되는 객체에 대한 수정 작업을 할 수 있습니다.

type Circle struct {
    radius float64
}

func (c *Circle) SetRadius(radius float64) {
    c.radius = radius
}

func (c *Circle) Area() float64 {
    return math.Pi * c.radius * c.radius
}

위 예제에서는 Circle이라는 구조체에 SetRadiusArea라는 메소드를 정의했습니다. SetRadius 메소드는 Circle 구조체에 연결된 포인터를 매개변수로 받아 원의 반지름을 설정합니다. Area 메소드는 포인터를 매개변수로 받아 해당 객체의 넓이를 계산하여 반환합니다.

c := &Circle{radius: 2}
c.SetRadius(3)
fmt.Println(c.Area()) // 출력: 28.274333882308138

위 예제에서 Circle 객체를 생성한 후 포인터를 이용하여 SetRadius 메소드를 호출하여 반지름을 변경하고, Area 메소드를 호출하여 원의 넓이를 계산하고 출력합니다.

결론

이렇게 Go 언어에서는 메소드와 포인터를 함께 사용하여 객체 지향적인 프로그래밍을 구현할 수 있습니다. 메소드를 사용하면 특정 타입의 객체에 연결된 동작을 캡슐화할 수 있고, 포인터를 사용하면 메소드가 호출된 객체를 직접 수정할 수 있습니다. 이러한 기능들을 활용하여 좀 더 효율적이고 간결한 코드를 작성할 수 있습니다.

더 자세한 내용은 Go 언어 공식 문서를 참고하시기 바랍니다.