Golang 구조체와 메서드 - Go series(9)

Date:     Updated:

Categories:

Tags: ,

image

구조체

Go는 클래스, 객체, 상속개념이 없다. 대신 struct로 표현이 되는데, struct는 필드만을 가지며 메서드는 별도 분리가 되어 정의된다.
type문을 사용하여 정의가 되는데, 예시는 아래와 같다.

package main
type animal struct{
    name string
    age int
}
func main(){
    ani := animal{}
    ani.name = "tiger"
    ani.age = 5
}

위와 같이 animal{}을 사용하여 빈 객체를 할당 후 아래처럼 필드값을 채우는 방법이 첫 번째 예시지만, 생성자처럼 초기값을 할당하는 방법이 있다.

var ani animal
ani = animal{"tiger",5}
ani2 := animal{name:"tiger",age:5}

ani2같이 사용할 경우 생략된 필드는 0 값을 가지게 된다.
또 다른 방법으로는 new 키워드를 사용할 수 있다.

ani := new(animal)
ani.name = "tiger"
ani.age = 5

기본적으로 struct는 mutable 하여 파라미터로 넘길 때는 new키워드를 사용하여 생성된 객체는 구조체포인터를 반환하므로 reference로 반환을 할 수 있다.

  • 생성자 함수

    package main
    
    type dict struct{
        data map[int]string
    }
    func newDict() *dict{ // dict라는 구조체의 생성자같은 역할을 한다.
        d := dict{}
        d.data = map[int]string
        return &d
    }
    func main(){
        d := newDict() // 객체가 생김
        dic.data[0] = "A"
    }
    

메서드

특별한 형태의 func 함수인데, 이 함수가 어떤 struct를 위한 메서드인지 가 표시가 된다.
예를 들면 rect라는 struct가 있다고 하자. 그렇다면 그 rect의 넓이를 구하기 위한 메서드는 다음과 같다.

package main

type Rect struct{
    width, height int
}

func (r Rect) getArea() int{
    return r.width * r.height
}

func main(){
    r := Rect{5,10}
    println(r.getArea())
}

Leave a comment