15.1. 프로그램언어 고(Go)에서의 구조체 선언과 초기화

프로그램언어 고(Go)의 기본 구조체 선언

고(Go) 프로그래밍 언어에서 기본 구조체를 선언하는 방법에 대해 설명드리겠습니다.

구조체는 서로 다른 타입의 데이터를 묶어서 사용할 수 있는 사용자 정의 데이터 타입입니다. go언어에서는 struct 키워드를 사용하여 구조체를 정의합니다.


// Person 구조체 정의
type Person struct {
    name string
    age  int
}

위의 코드에서 Person이라는 구조체를 정의했습니다. 구조체 내부에는 name과 age라는 필드를 가지고 있습니다. name은 문자열(string) 타입, age는 정수(int) 타입입니다.

이렇게 정의한 구조체는 아래와 같이 변수를 선언할 때 사용할 수 있습니다.


// p1이라는 Person 타입의 변수 선언
var p1 Person 

// 구조체 初始化
p1.name = "홍길동" 
p1.age = 30

p1 변수를 Person 타입으로 지정하여 선언했습니다. 이후 p1.name과 p1.age를 통해 각각의 필드에 접근할 수 있습니다.

구조체를 정의할 때는 복合데이터를 표현하기 위해 여러 종류의 데이터를 묶는 것이 일반적입니다. 위 예에서 Person 구조체는 사람을 표현하기 위해 이름과 나이 정보를 함께 GROUP화했습니다.

이상으로 고(Go)언어의 기본 구조체 선언 방법에 대해 설명을 마치겠습니다. 예제코드와 함께 구조체 정의 방법, 변수 선언 및 초기화 과정을 담았습니다. 추가로 궁금하신 점이 있으시면 문의 부탁드립니다.

프로그램언어 고(Go)에서의 초기화되지 않은 구조체 생성

프로그램언어 고(Go)에서 구조체를 선언하고 사용할 때 초기화하지 않고 값을 할당하지 않은 상태로 구조체를 생성하면, 구조체의 필드들은 제로값(zero value)으로 자동으로 초기화됩니다.

예를 들어 다음과 같이 Person 이름의 구조체를 선언하고 p 변수를 Person형으로 선언했지만 초기화하지 않고 사용할 경우


type Person struct {
    Name string
    Age  int
}

var p Person

이 경우 p변수의 Name과 Age 필드는 자동으로 빈 문자열과 0으로 초기화됩니다.

즉, Go언어의 구조체는 생성과 동시에 자동으로 제로값으로 초기화되기 때문에, 명시적으로 초기화하지 않더라도 사용할 수 있습니다.

다만 구조체 포인터의 경우에는 초기화하지 않으면 nil 포인터가 되기 때문에 주의가 필요합니다.


type Person struct {
    Name string
    Age  int 
}

var p *Person

if p == nil {
    p = new(Person) 
}

위 예제에서 보다시피 구조체 포인터를 사용할 때에는 nil 확인 후에 new를 이용하여 메모리를 할당해 주어야 정상적으로 사용할 수 있습니다.

프로그램언어 고(Go)에서의 구조체에 초기값 부여하기

프로그램언어 고(Go)에서 구조체에 초기값을 부여하는 방법에 대해 설명드리겠습니다.

구조체를 정의한 후, 해당 구조체의 인스턴스를 생성할 때 초기값을 부여할 수 있습니다. 이를 위해서는 구조체 정의 시에 필드에 대한 타입과 이름을 지정해주면 됩니다.


package main

import "fmt"

type person struct {
    name string
    age  int
}

func main() {

    // 초기값 부여
    p1 := person{name: "홍길동", age: 30} 

    fmt.Println(p1)
}

위의 예제코드에서 보다시피 person 구조체를 정의하고, main() 함수 내에서 p1 변수를 선언하는 구문에서 person 구조체의 필드인 name과 age에 대한 초기값을 부여하고 있습니다.

이런 방식으로 구조체 인스턴스 생성 시 초기값을 부여하면, 구조체의 필드값을 초기화할 수 있습니다.

주의할 점은 구조체의 필드 순서와 상관없이 필드 이름을 기준으로 값을 매핑하기 때문에, 정의된 필드 이름과 다르면 초기화에 실패할 수 있다는 점입니다.

또한, 일부 필드에만 초기값을 줄 경우 zero value로 초기화됩니다.

이와 같이 고(Go) 프로그램언어에서는 구조체 정의 시 지정한 필드의 이름을 통해 구조체 인스턴스 생성 시 초기값을 유연하게 부여할 수 있습니다.

간단한 예제를 통해 설명드렸는데, 구조체 초기화에 대해 더 궁금한 점이 있다면 언제든 질문 부탁드립니다.

프로그램언어 고(Go)에서의 구조체를 이용한 복합 자료형 사용

고(Go)언어에서 구조체는 복합 자료형을 만드는 데 사용합니다. 구조체를 정의하고 그 안에 여러 변수를 넣어서 복합 데이터를 표현할 수 있죠.

예를 들어,

type person struct {
    name string
    age  int
}

func main() {
    // person 구조체 인스턴스 생성
    p := person{name: "홍길동", age: 30} 

    // 필드 접근
    fmt.Println(p.name)
    fmt.Println(p.age)  
}

이와 같이 person 이라는 구조체를 만들고, name과 age 라는 필드를 가집니다.

그리고 main() 함수에서 person 구조체의 인스턴스를 생성하고 점(.)을 통해 각 필드에 접근할 수 있습니다.

구조체는 유용한 복합 데이터 타입이며, 다음과 같은 장점이 있습니다.

– 서로 연관된 데이터를 묶어서 관리할 수 있습니다.
– 코드의 가독성이 좋아집니다.
– 데이터에 대한 접근 제어를 할 수 있습니다.

특히 다른 언어와는 달리 고(Go)의 구조체는 초기화를 할 때 값을 순서대로 지정하지 않고 필드名을 통해 값을 지정할 수 있다는 특징이 있죠.

이를 통해 값의 의도를 더욱 분명히 표현할 수 있고, 코드 가독성도 높아집니다.

또한 private이나 public 같은 접근 제어자가 없더라도 은닉성을 위해 글자 소문자로 시작하는 필드는 패키지 외부에서 접근이 불가능하다는 규칙이 있습니다.

구조체는 고(Go) 프로그래밍에 있어서 가장 기본이 되는 데이터 타입 중 하나이며 다양한 곳에 응용되기 때문에 꼭 숙지하고 있어야 하는 개념입니다.

이상 구조체에 대한 기초적인 설명을 드렸습니다. 보다 자세한 사용 예제가 필요하시다면 말씀해 주세요. 최대한 도와드리겠습니다.

프로그램언어 고(Go)에서의 구조체를 이용한 데이터 그룹핑

프로그램언어 고(Go)에서 구조체(struct)는 연관된 데이터를 그룹화하여 하나의 데이터 타입으로 정의할 수 있게 해주는 기능입니다. 구조체를 사용하면 복잡한 데이터를 좀 더 쉽고 편리하게 다룰 수 있습니다.


package main

import "fmt"

// User 구조체 정의 
type User struct {
  Name string
  Age  int
  Email string
}

func main() {

  // User 구조체 인스턴스 생성
  user1 := User{
        Name: "홍길동",
        Age: 30,
        Email: "hong@example.com",
  }

  // 구조체 필드 접근
  fmt.Println(user1.Name)
  fmt.Println(user1.Age)
  
  // 구조체 전체 출력
  fmt.Printf("%+v", user1)
}

위 예제에서 볼 수 있듯이, User라는 구조체를 정의하고 이를 기반으로 user1 인스턴스를 생성했습니다.
이 User 구조체에는 Name, Age, Email 이렇게 3개의 필드(멤버 변수)가 정의되어 있습니다.

그리고 user1 인스턴스를 통해 각 필드에 접근할 수 있습니다.
user1.Name 과 같이 점(.)을 사용하여 필드에 접근할 수 있죠.

또한 fmt.Printf(“%+v”, user1) 과 같이 user1 전체 구조체 데이터를 출력할 수도 있습니다.

이처럼 Go의 구조체는 관련된 데이터를 묶어서 사용할 수 있게 해주는 매우 유용한 기능입니다.
복잡한 데이터 타입을 좀 더 쉽고 편리하게 사용할 수 있다는 장점이 있지요.

Leave a Comment