[Go] Go언어 구조체(struct)와 메소드(method) 기본 사용법
Go언어에서 구조체(struct)와 메소드(method)의 기본적인 사용법을 정리해보자
환경
- Go(1.15.8)
- 다른 프로그래밍 언어 사용 경험
구조체(struct)와 메소드(method)
Go에서의 구조체(struct)
- Go에서는 자기만의 방식으로 OOP를 지원한다. 여기서 신기하게도 기존에 흔하게 사용하는 class가 없다고 한다. class가 없기에 상속도 없다.
- 그래서 구조체(struct)와 메소드(method)를 사용한다.
- 아래에서는 이제 간단하게 구조체(struct)의 사용법과 그에 사용되는 메소드(method)에 대해 알아본다.
구조체(struct) 예시
- 아래처럼 4가지 방법이 사용가능하다.
- 기존 예약어인
new
를 사용할수도 있고 생성자 함수를 만들수도 있다.
package main
import (
"fmt"
)
// define struct
type Rectangle struct {
width int
height int
}
// define constructor
func NewRectangle(width int, height int) *Rectangle{
return &Rectangle{width, height}
}
func main() {
// create instances
var rec1 = Rectangle{}
rec1.width = 2
rec1.height = 3
rec2 := Rectangle{4, 5}
var rec3 = new(Rectangle)
rec3.width = 6
rec3.height = 7
var rec4 = NewRectangle(8, 9)
// check instances
fmt.Println(rec1.width, rec1.height)
fmt.Println(rec2.width, rec2.height)
fmt.Println(rec3.width, rec3.height)
fmt.Println(rec4.width, rec4.height)
}
2 3
4 5
6 7
8 9
메소드(method) 예시
- 리시버(Receiver)를 통해 어떤 구조체(struct)의 메소드인지 명시가 가능하다.
- Value 리시버와 Pointer 리시버가 있다.
- 아래 예제에서는
(r Rectangle)
과(r *Rectangle)
가 리시버(Receiver)다.
package main
import (
"fmt"
)
// define struct
type Rectangle struct {
width int
height int
}
// define constructor
func NewRectangle(width int, height int) *Rectangle{
return &Rectangle{width, height}
}
// define methods
func (r Rectangle) area() int{
return r.width * r.height
}
// pointer receiver
func (r *Rectangle) setWidth(width int){
r.width = width
}
// value receiver
func (r Rectangle) setHeight(height int){
r.height = height
}
func main() {
// create instances
var rec = NewRectangle(8, 9)
// check instances
fmt.Println(rec.width, rec.height)
fmt.Println()
// check methods
fmt.Println(rec.area())
fmt.Println()
rec.setWidth(10)
// rec.height would not changed because its method's receiver is value receiver
rec.setHeight(10)
fmt.Println(rec.width, rec.height)
}
8 9
72
10 9