Scroll Top

GOLANG – 구조체

GO

구조체

구조체(Structure)란 하나 이상의 변수를 묶어 새로운 자료형을 정의하는 데이터 타입이다.

예를들면 ‘집’ 에 대한  ‘주소’와 ‘전화번호’ 등이 있다. 매번 ‘주소’와 ‘전화번호’를 선언하기엔 번거로우므로 ‘집’이라는 구조체에 묶어 저장한다.

package main

import "fmt"

type home struct {
        address string // 주소
        contect int // 전화번호
        tv bool // tv 존재 여부
}

func main() {
        var dale = home{}
        fmt.Println(dale)

        dale.address = "서울특별시" // 직접 값을 입력할 수 있음
        dale.contect = 20
        dale.tv = true

        fmt.Println(dale)

        hack := home{"부산광역시", 30, false} // 선언할 때 값을 입력할 수 있음. 변수를 지정 안하면 순차적으로 입력됨
        fmt.Println(hack)
        fmt.Println(hack.contect)

        durumung := home{contect: 40} // 선언할 때 일부만 값을 입력하고 싶으면 변수를 지정하면 됨
        fmt.Println(durumung)

        work := new(home) // new 로 객체 생성이 가능하며 new 를 사용할 경우 객체의 포인터를 리턴한다
        fmt.Println(work)
        work.address = "개성공단"
        fmt.Println(work)
}
┌──(daleji㉿HACK)-[~]
└─$ go run structure.go
{ 0 false}
{서울특별시 20 true}
{부산광역시 30 false}
30
{ 40 false}
&{ 0 false}
&{개성공단 0 false}

생성자

구조체(struct)의 필드가 사용 전에 초기화되어야 하는 경우가 있다고 한다. 처음 여기서 ‘초기화’ 라는 단어가 어려웠다. 결국 초기화란 다음과 같다.

초기화 != 0 (Zero Value)
초기화 == 초기값 지정 (단, 0이 될 수 있음)

생성자 함수는 struct를 리턴하는 함수로서 그 함수 본문에서 필요한 필드를 초기화한다.

package main
import "fmt"
type dict struct {
    data map[int]string
}

//생성자 함수 정의
func newDict() *dict {
    d := dict{}
    d.data = map[int]string{}
    return &d //포인터 전달
}

func main() {
    dic := newDict() // 생성자 호출
    dic.data[1] = "A"
    fmt.Println(dic) // newDict 함수는 포인터로 반환
    fmt.Println(dic.data) // d.data 는 맵 선언
}
┌──(daleji㉿LAPTOP)-[~]
└─$ go run constructor.go
&{map[1:A]}
map[1:A]

추가로 구조체 안에서 구조체를 사용할 수 있다.

package main
import "fmt"
type home struct {
        address string // 주소
        contect int // 전화번호
        tv bool // tv 존재 여부
        person Human // Human 구조체 사용
}

type Human struct {
        name string
        age int
}

func main() {
        var dale = home{}
        fmt.Println(dale)
        dale.address = "서울특별시"
        dale.person.name = "daleji"
        fmt.Println(dale)

}
┌──(daleji㉿LAPTOP)-[~]
└─$ go run struct.go
{ 0 false { 0}}
{서울특별시 0 false {daleji 0}}

Leave a comment

You must be logged in to post a comment.