티스토리 뷰

반응형

Go 언어에서 **구조체(struct)**는 필드(field)로 구성된 사용자 정의 타입입니다.

여러 데이터를 하나의 타입으로 묶어서 사용해야 할 때 구조체를 사용합니다.

구조체는 객체 지향 언어에서 클래스와 유사한 역할을 합니다. 구조체를 선언하고 초기화하는 방법은 여러 가지가 있으며, 아래에 그 방법들을 설명합니다.

Go 언어에서 구조체 초기화하기

1. 구조체 선언

구조체는 type 키워드를 사용하여 선언합니다. 구조체 선언 시에는 필드의 이름과 타입을 정의합니다.

package main

import "fmt"

// Person 구조체 정의
type Person struct {
    Name   string
    Age    int
    Gender string
}

2. 구조체 인스턴스 초기화 방법

Go에서는 구조체를 초기화하는 다양한 방법이 있습니다.

2.1 기본 리터럴 방식으로 초기화

구조체의 필드 순서대로 값을 지정하여 초기화하는 방식입니다.

package main

import "fmt"

// Person 구조체 정의
type Person struct {
    Name   string
    Age    int
    Gender string
}

func main() {
    // 구조체 인스턴스 생성 및 초기화 (필드 순서대로)
    p1 := Person{"Alice", 30, "Female"}

    fmt.Println(p1) // 출력: {Alice 30 Female}
}

이 방법은 구조체의 필드 순서가 변경되면 코드가 영향을 받을 수 있습니다. 따라서 필드 순서에 의존하지 않는 명시적 방식이 더 권장됩니다.

2.2 명시적 필드 이름을 사용한 초기화

필드 이름을 명시적으로 지정하여 초기화하는 방법입니다. 필드의 순서와 상관없이 초기화할 수 있습니다.

package main

import "fmt"

// Person 구조체 정의
type Person struct {
    Name   string
    Age    int
    Gender string
}

func main() {
    // 구조체 인스턴스 생성 및 초기화 (명시적으로 필드 지정)
    p2 := Person{
        Name:   "Bob",
        Age:    25,
        Gender: "Male",
    }

    fmt.Println(p2) // 출력: {Bob 25 Male}
}

이 방법은 필드의 순서에 상관없이 원하는 필드를 초기화할 수 있어 더 안전하고 가독성이 좋습니다.

2.3 new 키워드를 사용한 초기화

new 키워드를 사용하면 구조체에 대한 포인터를 반환합니다. 이 방법은 구조체의 메모리를 할당하고 필드의 기본값으로 초기화합니다.

package main

import "fmt"

// Person 구조체 정의
type Person struct {
    Name   string
    Age    int
    Gender string
}

func main() {
    // new 키워드를 사용한 구조체 포인터 생성 및 초기화
    p3 := new(Person) // 포인터 타입 *Person 반환

    // 필드 값을 설정
    p3.Name = "Charlie"
    p3.Age = 40
    p3.Gender = "Male"

    fmt.Println(*p3) // 출력: {Charlie 40 Male}
}

이 방법은 구조체의 포인터를 직접 다루어야 할 때 유용합니다.

2.4 빈 구조체 초기화 후 필드 설정

구조체를 먼저 선언하고, 필드를 나중에 개별적으로 설정할 수 있습니다.

package main

import "fmt"

// Person 구조체 정의
type Person struct {
    Name   string
    Age    int
    Gender string
}

func main() {
    // 빈 구조체 선언
    var p4 Person

    // 필드 값 개별 설정
    p4.Name = "David"
    p4.Age = 35
    p4.Gender = "Male"

    fmt.Println(p4) // 출력: {David 35 Male}
}

이 방법은 구조체를 초기화한 후에 필요한 시점에 필드 값을 설정할 수 있습니다.

3. 구조체 초기화 시 주의사항

  • 구조체의 필드 이름을 명시적으로 사용하는 초기화 방식은 필드 순서에 영향을 받지 않으므로 코드 유지보수성이 높습니다.
  • new 키워드를 사용하면 구조체의 포인터를 반환하여 메모리 할당을 최적화할 수 있지만, 포인터를 올바르게 관리해야 합니다.
  • 모든 필드를 초기화하지 않으면 나머지 필드는 해당 타입의 기본값으로 초기화됩니다 (int0, string은 빈 문자열 "" 등).

요약

구조체는 다양한 방법으로 초기화할 수 있으며, 사용하는 방식에 따라 코드의 가독성과 안전성이 달라질 수 있습니다. 특정 용도와 상황에 맞는 초기화 방법을 선택하여 사용하면 됩니다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함