Menu
CoddyTech

생성자 함수

Coddy GO 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 107개 중 10번째.

Go에는 다른 언어와 같은 생성자가 없습니다. 대신 초기화된 구조체를 반환하는 NewTypeName이라는 이름의 함수를 만드는 것이 관례이며, 이 함수는 종종 포인터를 반환합니다.

기본 생성자 함수

type Person struct {
    Name string
    Age  int
}

func NewPerson(name string, age int) *Person {
    return &Person{
        Name: name,
        Age:  age,
    }
}

기본값이 있는 생성자

type Config struct {
    Host    string
    Port    int
    Timeout int
}

func NewConfig(host string) *Config {
    return &Config{
        Host:    host,
        Port:    8080,    // 기본값
        Timeout: 30,      // 기본값
    }
}

유효성 검사를 수행하는 생성자

func NewPerson(name string, age int) *Person {
    if name == "" {
        name = "Unknown"
    }
    if age < 0 {
        age = 0
    }
    return &Person{
        Name: name,
        Age:  age,
    }
}

생성자 함수 사용하기

func main() {
    p1 := NewPerson("Alice", 25)
    fmt.Println(p1.Name) // Alice

    p2 := NewPerson("", -5)
    fmt.Println(p2.Name) // Unknown
    fmt.Println(p2.Age)  // 0
}

생성자 함수는 &를 사용해 포인터(*StructName)를 반환합니다. 이렇게 하면 구조체를 복사하지 않고 포인터 리시버를 사용하는 메서드가 구조체에 직접 작동할 수 있습니다. 유효성 검사와 기본값 설정은 생성자 안에서 처리합니다.

challenge icon

챌린지

중급

검증 기능이 있는 BankAccount 구조체의 생성자 함수 NewBankAccount를 만드세요.

  • name(문자열)과 balance(float64)를 매개변수로 받습니다.
  • name이 비어 있으면 기본값으로 "Unnamed"를 사용합니다.
  • balance가 음수이면 기본값으로 0을 사용합니다.
  • 항상 Owner를 "Default Owner"로 설정합니다.
  • 새 구조체의 포인터를 반환합니다.

직접 해보기

package main

import "fmt"

func main() {
    var name string
    var balance float64
    fmt.Scan(&name, &balance)

    account := NewBankAccount(name, balance)

    fmt.Printf("Account: %s\n", account.Name)
    fmt.Printf("Balance: %.2f\n", account.Balance)
    fmt.Printf("Owner: %s\n", account.Owner)
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 Go 컴파일러