언어 Go는 필드를 하나의 개념으로 묶는 구조체 타입을 제공합니다. 아래는 (X, Y) 좌표를 나타내는 Point 타입을 나타냅니다.
type Point struct {
x float64
y float64
}
이 Point 타입을 객체로 만드는 방법은 너무….. 많아도 너무 마나. (마나? 히어로즈에서 제이나는 늘 마나가 부족하지..) 큭.. 여튼.. 많지만, 알고보면 일관성이 있어 이해가 어렵지 않은데요. 아래와 같은 다양한 방식을 지원합니다.
{
var p Point
p.x = 10.0
p.y = 10.0
fmt.Println(p)
}
{
var p Point = Point{10.0, 10.0}
fmt.Println(p)
}
{
var p = Point{10.0, 10.0}
fmt.Println(p)
}
{
var p = Point{x: 10.0, y: 10.0}
fmt.Println(p)
}
{
var p *Point = new(Point)
p.x = 10.0
p.y = 10.0
fmt.Println(p)
}
객체 생성 방식이 5개 정도 되는데요. 실행해 보면 다음과 같습니다.
{10 10}
{10 10}
{10 10}
{10 10}
&{10 10}
마지막 방식은 new를 통해 포인트 변수로 객체를 생성했습니다. 불행인지, 아니면 의도적인 것인지.. new를 통해 바로 구조체의 필드값을 지정할 수 없는데요. 이럴 때는 하나의 패턴으로 다음처럼 생성자 함수를 만들어 활용할 수 있습니다.
func NewPoint(x, y float64) *Point {
return &Point{x, y}
}
위의 함수의 사용은 다음과 같습니다.
{
var p = NewPoint(10.0, 10.0)
fmt.Println(p)
}
실행 결과는 아래와 같습니다.
&{10 10}
