더북(TheBook)

생성 함수

구조체를 생성할 때 초깃값을 지정하지 않으면 제로값으로 초기화된다. 하지만 종종 규칙에 따라 초깃값을 지정해야 할 때가 있다. Go의 구조체는 생성자를 지원하지 않지만, 구조체를 생성하기 위한 함수를 만들어 생성자와 같은 효과를 줄 수는 있다.

type Item struct {
    name     string
    price    float64
    quantity int
}
 
func NewItem(name string, price float64, quantity int) *Item {
    if price <= 0 || quantity <= 0 || len(name) == 0 {
        return nil
    }
    return &Item{name, price, quantity}
}

Item 타입은 public으로 정의했지만, 내부 필드인 name, price, quantity는 외부에서 값을 임의로 수정하지 못하도록 private으로 정의했다. 그리고 항상 유효한 *Item이 생성되도록 NewItem() 함수를 제공했다. 다음과 같이 NewItem() 함수를 사용하면 항상 유효한 값으로 *Item이 생성됨을 보장한다.

t := NewItem(“Men’s Slim-Fit Shirt”, 25000, 3)

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.