생성자 함수
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)를 반환합니다. 이렇게 하면 구조체를 복사하지 않고 포인터 리시버를 사용하는 메서드가 구조체에 직접 작동할 수 있습니다. 유효성 검사와 기본값 설정은 생성자 안에서 처리합니다.
챌린지
중급검증 기능이 있는 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)
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
8에러 처리와 OOP
error 인터페이스사용자 정의 에러 타입에러 래핑 (fmt.Errorf)센티넬 에러errors.Is()와 errors.As()Panic, Defer, Recover요약 - 파일 파서직접 연습해 보세요: 온라인 Go 컴파일러