-
golang struct 이해하기Language/Golang 2023. 9. 18. 06:50728x90반응형
- 목차
* 소개
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