🔥 구조체 리터럴

322자
4분

구조체 리터럴은 구조체의 필드 값을 직접 지정하여 구조체 변수를 생성하는 방법입니다. 중괄호 {}를 사용하여 필드 값을 나열하며, 필드 이름을 생략하고 순서대로 값을 지정할 수도 있고, 필드 이름을 명시적으로 지정하여 값을 할당할 수도 있습니다.

구조체 리터럴을 사용하면 구조체 변수를 간편하게 초기화할 수 있으며, 필드 값을 명확하게 지정할 수 있어 코드의 가독성을 높일 수 있습니다.

다음 예제 코드를 통해 구조체 리터럴의 사용 방법을 알아봅시다.

package main
 
import "fmt"
 
type Vertex struct {
	X, Y int
}
 
var (
	v1 = Vertex{1, 2}  // Vertex 타입을 가짐
	v2 = Vertex{X: 1}  // Y는 암묵적으로 0
	v3 = Vertex{}      // X와 Y 모두 0
	p  = &Vertex{1, 2} // *Vertex 타입을 가짐
)
 
func main() {
	fmt.Println(v1, p, v2, v3)
}
 
go

위 코드에서 Vertex 구조체를 정의하였습니다. Vertex 구조체는 XY라는 두 개의 int 타입 필드를 가집니다.

type Vertex struct {
	X, Y int
}
 
go

그 다음, 여러 개의 변수를 선언하고 있습니다.

var (
	v1 = Vertex{1, 2}  // Vertex 타입을 가짐
	v2 = Vertex{X: 1}  // Y는 암묵적으로 0
	v3 = Vertex{}      // X와 Y 모두 0
	p  = &Vertex{1, 2} // *Vertex 타입을 가짐
)
 
go
  • v1Vertex 타입의 변수로, {1, 2}로 초기화되었습니다. 이는 X에 1, Y에 2를 할당한 것과 같습니다.
  • v2Vertex 타입의 변수로, {X: 1}로 초기화되었습니다. 이는 X에 1을 할당하고, Y는 암묵적으로 0으로 초기화한 것과 같습니다.
  • v3Vertex 타입의 변수로, {}로 초기화되었습니다. 이는 XY 모두 0으로 초기화한 것과 같습니다.
  • pVertex 타입의 포인터 변수로, &Vertex{1, 2}로 초기화되었습니다. 이는 Vertex{1, 2}의 주소를 할당한 것과 같습니다.

마지막으로 main 함수에서는 fmt.Println을 사용하여 v1, p, v2, v3를 출력합니다.

func main() {
	fmt.Println(v1, p, v2, v3)
}
 
go

이 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

{1 2} &{1 2} {1 0} {0 0}
text

이렇게 구조체 리터럴을 사용하면 구조체 변수를 간편하게 선언하고 초기화할 수 있습니다. 필드 이름을 명시적으로 지정하거나 생략할 수 있으며, 초기화되지 않은 필드는 해당 타입의 제로 값으로 자동 초기화됩니다.