처음부터 시작 - 구조체

처음부터 시작 - 구조체



간단한 시나리오부터 시작하겠습니다. 계정 잔액이 있습니다. 다음과 같이 변수에 저장할 수 있습니다.

accountBalance int32


이제 훌륭합니다. 하지만 은행 계좌와 같이 좀 더 복잡한 것을 설명하고 싶다면? 은행 계좌는 ID, 잔액, 계좌 소유자 등과 같은 더 많은 정보로 구성됩니다. 다음과 같이 각 속성을 정수로 나타낼 수 있습니다.

var accountBalance int32
var owner string
var id int


그러나 하나 이상의 은행 계좌를 운영해야 하는 경우 어떻게 됩니까? 즉, 다음과 같이 저장할 수 있습니다.

var accountBalance int32
var owner string
var id int

var accountBalance2 int32
var owner2 string
var id2 int


실제로 확장되지는 않지만 필요한 것은 이 모든 정보를 다음과 같이 그룹화할 수 있는 struct와 같은 더 복잡한 유형입니다.

type Account struct {
  accountBalance int32
  owner string
  id int
}


참고문헌



https://www.golangprograms.com/go-language/struct.html

구조체 정의



좋습니다. 관련 정보를 수집하기 위해 구조체가 필요한 이유를 이해하고 지금까지 한 가지 예를 보았습니다Account. 하지만 부분을 나누어서 구조체를 정의하는 방법을 살펴보겠습니다. 구문은 다음과 같습니다.

type <a name for the struct> struct {
  ... fields
}


다른 예를 보여드리지만 이번에는 주소에 대한 구조체를 만듭니다.

type Address struct {
 city string
 street string
 postal string
}


구조체 인스턴스 만들기



구조체에서 인스턴스를 만들려면 다음 두 가지 방법 중 하나를 사용할 수 있습니다.

  • 변수를 정의하고 변수 선언 후 필드를 설정합니다.

  •    var address Address
       address.city = "London"
       address.street = "Buckingham palace"
       address.postal = "SW1"
    



  • 한 번에 모두 정의하면 모든 값을 한 번에 설정할 수도 있습니다.

  •    address2 := Address{"New York", "Central park", "111"}
    


    구조체 포함



    구조체를 다른 구조체에 포함할 수도 있습니다. Address 구조체가 있고 주소는 Person와 같은 상위 수준 구조체에서 사용할 수 있는 것입니다. 그 방법은 다음과 같습니다.

    type Person struct {
     name    string
     address Address
    }
    


    이 코드에서 Person 구조체에는 address 유형의 Address 필드가 있습니다.

    이 구조체를 인스턴스화하기 위해 다음과 같이 입력할 수 있습니다.

    person := Person{
      name: "chris",
      address: Address{
       city: "Stockholm",
      },
     }
    


    기본 명명에 의존



    필드address를 생성한 방법에 유의하십시오. 대신 다음과 같이 정의하여 몇 문자 입력을 건너뛸 수 있습니다.

    type Employee struct {
     Address
     company string
    }
    


    필드 이름을 생략하고 Address 를 입력하면 필드 이름과 필드 유형이 같은 이름이 됩니다. 여기에서 인스턴스를 생성하는 것은 매우 유사합니다.

    employee := Employee{
      Address: Address{
       city: "LA",
      },
      company: "Microsoft",
     }
    


    구조체에 구현 추가



    구조체는 본질적으로 복잡한 것을 설명하는 데이터 필드입니다. 구조체에서 작동하는 함수를 만들어 동작을 추가할 수 있습니다. 예를 들면 다음과 같습니다.

    func (a Address) string() string {
     return fmt.Sprintf("City: %s, Street: %s, Postal address: %s", a.city, a.street, a.postal)
    }
    

    string() 메서드를 추가했습니다. 메서드는 Address에 속하며 (...)를 취하는 func 키워드 바로 뒤에 a Address가 있음을 알 수 있습니다. 나머지 구현은 Sprintf() 를 통해 형식이 지정된 문자열을 반환합니다. 다음 코드가 주어집니다.

    var address Address
    address.city = "London"
    address.street = "Buckingham palace"
    address.postal = "SW1"
    fmt.Println(address.string())
    

    string()를 호출하면 다음과 같은 결과가 표시됩니다.

    City: London, Street: Buckingham palace, Postal address: SW1
    


    요약



    이 문서에서는 복잡한 것을 설명하는 많은 속성이 있을 때 필드를 구조체로 그룹화해야 하는 이유를 배웠습니다. 이러한 경우에 구조체를 사용하기를 바랍니다.

    좋은 웹페이지 즐겨찾기