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 |