Struct

이전에 map에 대해배웠다. map의 경우 key와 value의 타입이 고정되어 있기 때문에, 아래와 같은 형태는 컴파일 에러가 발생한다.

user := map[string]string{"name":"qazyj", "age":1}

이러한 경우 Struct라는 구조체를 이용해서 관리하면 된다. map보다 동적이며, 원하는 type으로 생성할 수 있다. Java의 class와 같은 느낌이다.

 

테스트

type person struct {
	name string
	age int
	favFood []string
}

func main() {
	favFood := []string{"ramen", "kimchi"}
	user := person{"qazyj", 20, favFood}
	fmt.Println(user)
}

출력

func main() {
	favFood := []string{"ramen", "kimchi"}
	user := person{"qazyj", 20, favFood}
	fmt.Println(user.name)
}

출력

 

하지만, 위와같이 structure를 만드는 것은 코드상에서 보기 좋지 않아 보인다. (명확하게 보이지 않기 때문이다. 어떤 value가 어떤 value인지.. 값을 찾기 위해서는 정의되어있는 person을 한 번 더 봐야하기 때문이다.) 그렇기때문에 아래와 같은 방식이 처음 쓸 때는 불편하지만, 이후에 다시 코드를 볼 때 읽기 편리하다.

func main() {
	favFood := []string{"ramen", "kimchi"}
	user := person{
		name: "qazyj", 
		age: 20, 
		favFood: favFood}
	fmt.Println(user)
}

각각 어떤 value가 어떤 value인지 person이라는 struct를 보지않아도 한 눈에 확인할 수 있다. Java보다 가독성이 뛰어난 느낌이 든다.

 

Go는 java처럼 class가 없다. 또한, python이나 js처럼 object도 없다. Java에서 class를 생성할 때 필수로 있어야하는 것이 생성자이다. Go에서는 생성자가 없다.

 

 

 

 

 

 

 

'Go' 카테고리의 다른 글

method를 활용한 map 구현(Search, Add, Delete, Update)  (0) 2024.01.10
struct/public,private/String()/error handling  (0) 2024.01.07
Maps  (0) 2023.12.30
Arrays/Slices  (0) 2023.12.29
Pointer  (0) 2023.12.28

+ Recent posts