구조체 초기화
Coddy GO 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 107개 중 9번째.
Go는 구조체를 초기화하는 여러 가지 방법을 제공하며, 각 방법은 서로 다른 상황에서 유용합니다.
이름이 지정된 필드 초기화
type Person struct {
Name string
Age int
City string
}
p1 := Person{
Name: "Alice",
Age: 25,
City: "New York",
}위치 기반 초기화 (순서는 필드 선언과 일치해야 합니다)
p2 := Person{"Bob", 30, "London"}제로 값 초기화 (모든 필드가 기본값을 가짐)
p3 := Person{}
// Name: "", Age: 0, City: ""
부분 초기화 (설정되지 않은 필드는 제로 값을 가집니다)
p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""
&를 사용한 구조체 포인터
p5 := &Person{
Name: "Diana",
Age: 28,
City: "Paris",
}
fmt.Println(p5.Name) // Dianavar를 사용한 다음 필드 할당하기
var p6 Person
p6.Name = "Eve"
p6.Age = 22이름이 지정된 필드 초기화는 가장 일반적이고 가독성이 좋은 방식입니다. 구조체에 대한 포인터가 필요할 때 &를 사용하세요.
챌린지
중급서로 다른 초기화 방법을 사용하여 세 개의 Player 객체를 생성하세요:
- player1: 입력 값을 사용한 명명된 필드 초기화
- player2: Name: "Guest", Class: "Novice", HitPoints: 50을 사용한 명명된 필드 초기화
- player3:
var선언을 사용한 후 각 필드를 개별적으로 할당
치트 시트
Go는 구조체를 초기화하는 여러 가지 방법을 제공합니다:
필드 이름 지정 초기화 (가장 일반적이고 가독성이 좋음):
p1 := Person{
Name: "Alice",
Age: 25,
City: "New York",
}위치 기반 초기화 (순서가 필드 선언과 일치해야 함):
p2 := Person{"Bob", 30, "London"}제로 값(Zero-value) 초기화 (모든 필드가 기본값을 가짐):
p3 := Person{}
// Name: "", Age: 0, City: ""부분 초기화 (설정되지 않은 필드는 제로 값을 가짐):
p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""&를 사용한 구조체 포인터:
p5 := &Person{
Name: "Diana",
Age: 28,
}
fmt.Println(p5.Name) // Dianavar 사용 후 필드 할당:
var p6 Person
p6.Name = "Eve"
p6.Age = 22직접 해보기
package main
import "fmt"
func main() {
var name, class string
var hp int
fmt.Scan(&name, &class, &hp)
// TODO: 입력된 값들을 사용하여 이름이 지정된 필드 초기화 방식으로 player1을 생성하세요.
// TODO: 이름이 지정된 필드 초기화 방식을 사용하여 player2를 생성하세요:
// Name: "Guest", Class: "Novice", HitPoints: 50
// TODO: var 선언을 사용하여 player3를 생성한 후, 필드 값을 할당하세요:
// Name: "Hero", Class: "Knight", HitPoints: 200
fmt.Printf("Player 1: %s (%s) - HP: %d\n", player1.Name, player1.Class, player1.HitPoints)
fmt.Printf("Player 2: %s (%s) - HP: %d\n", player2.Name, player2.Class, player2.HitPoints)
fmt.Printf("Player 3: %s (%s) - HP: %d\n", player3.Name, player3.Class, player3.HitPoints)
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
8에러 처리와 OOP
error 인터페이스사용자 정의 에러 타입에러 래핑 (fmt.Errorf)센티넬 에러errors.Is()와 errors.As()Panic, Defer, Recover요약 - 파일 파서