ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • golang struct 이해하기
    Language/Golang 2023. 9. 18. 06:50
    728x90
    반응형

    - 목차

     

    * 소개

    struct 는 go 에서 커스텀 타입의 데이터를 표현하기 위해서 사용됩니다.
    다른 프로그래밍 언어의 class 와 견줄 수 있습니다.
    데이터 타입으로써 중점을 두기 때문에 method 를 가지진 않으며 여러 타입의 field 들을 가집니다.

    * 사용법


    간단하게 animal 이라는 struct 를 정의해보겠습니다.
    string 타입의 name 만을 가지는 struct 입니다.


    type animal struct {
        name string
    }


    go 에서 struct 를 정의할 땐, type 키워드를 사용합니다.
    type + struct name + struct 조합의 선언을 통해서 struct 를 정의할 수 있습니다.

    이제 정의된 animal 이라는 커스텀 타입 객체를 생성해보겠습니다.


    package main
    
    import (
    	"fmt"
    )
    
    type animal struct {
        name string
    }
    
    func main() {
    	var dog = animal{"dog"}
    
    	var cat = animal{}
    	cat.name = "cat"
    
    	sheep := animal{"sheep"}
    
    	bird := animal{}
    	bird.name = "bird"
    
    	fmt.Println(dog)
    	fmt.Println(cat)
    	fmt.Println(sheep)
    	fmt.Println(bird)
    }

     

    <결과>

    {dog}
    {cat}
    {sheep}
    {bird}


    struct 객체를 생성하는 여러가지 방식으로 생성을 시도해보았습니다.
    dog 객체처럼 animal struct 의 생성자의 인자에 데이터를 주입해도 되고,
    cat 객체처럼 객체 생성과 field 의 값할당 부분을 나누어도 됩니다.
    그리고 sheep 객체처럼 := (short assignment statement) 를 사용해도 상관없습니다.



     

    * new 키워드로 생성하기

    new 키워드로 struct 객체를 생성할 수도 있습니다.

    struct{} 방식으로 생성된 객체와 new 키워드로 생성된 객체의 차이점은 pointer 타입으로 생성된다는 점입니다.

     

    package main
    
    import (
    	"fmt"
    )
    
    type animal struct {
    	name string
    }
    
    func main() {
    	turtle := new(animal)
    	turtle.name = "turtle"
    	fmt.Println(turtle)
    	fmt.Println(*turtle)
    }

     

    <결과>

    &{turtle}
    {turtle}

     

    * struct 에 method 추가

    struct 구조체 내부에는 field 만이 선언 가능합니다.

    그리고 생성된 struct 외부에 method 를 추가할 수 있습니다.

    java, python 등의 프로그래밍 언어에서 class 를 선언할 때 field 와 method 를 class {} block 내부에서 동시에 선언했던 것과는 다릅니다.

    go 에서 struct {} block 내부에는 field 만이 선언 가능하고, struct {} block 외부에서 method 를 선언할 수 있습니다.

     

    struct 의 method 는 아래와 같은 기본적인 틀은 아래와 같습니다.

    func ( structName struct ) functionName returnType {
    	// content of function
    }

     

    animal struct 에 say 하는 method 를 추가하였습니다.

    package main
    
    import (
    	"fmt"
    )
    
    type animal struct {
    	name string
    }
    
    func (a animal) say() {
    	fmt.Println("my name is " + a.name)
    }
    
    func main() {
    	var dog = animal{"dog"}
    	var cat = animal{}
    	cat.name = "cat"
    	sheep := animal{"sheep"}
    	bird := animal{}
    	bird.name = "bird"
    	turtle := new(animal)
    	turtle.name = "turtle"
    
    	dog.say()
    	cat.say()
    	sheep.say()
    	bird.say()
    	turtle.say()
    }

     

    <결과>

    my name is dog
    my name is cat
    my name is sheep
    my name is bird
    my name is turtle

     

     

     

    반응형

    'Language > Golang' 카테고리의 다른 글

    golang package 이해하기  (2) 2023.09.18
    golang cobra  (0) 2023.01.27
    Go-modules  (0) 2022.04.15
    [Sarama] Sarama 로 Kafka Producer 만들어보기 ( Golang )  (0) 2021.12.04
Designed by Tistory.