[Golang] 구조체 객체 생성

언어 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}

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다