Golang
[Golang] 구조체
GenieLove!
2022. 2. 21. 10:27
728x90
반응형
1.구조체란
(1)여러 타입의 값들을 변수 하나로 묶어주는 기능
(2)선언
type Student struct {
Name string
Age int
}
2.구조체 내부에 구조체
(1)
type User struct {
Name string
Age int
ID string
}
type Student {
UserInfo User
Class string
}
student := Student{
User{
"지니",
5,
"genie",
},
"AClass",
}
fmt.Println(student.UserInfo.Name)
(2)포함된 필드 방식
type User struct {
Name string
Age int
ID string
}
type Student {
User
Class string
ID string
}
student := Student{
User{
"지니",
5,
"genie",
},
"AClass",
"genie2"
}
fmt.Println(student.Name)
fmt.Println(student.User.ID)//중복된 필드가 있을 땐 포함된 구조체 명까지 작성
fmt.Println(student.ID)
3.구조체 크기
(1)메모리 정렬 - 64비트 컴퓨터는 레지스터 크기가 8바이트(32비트는 4바이트)이므로 한 번 연산에 8바이트 크기를 연산할 수 있어, User2의 Age의 4byte가 할당되고 Score의 8byte가 할당될 때 메모리 패딩(메모리 정렬을 위해서 필드 사이에 공간을 띄우는 것)으로 인해 Age와 Score 사이를 4byte만큼 띄워서 할당 된다.
type User struct {
Age int//8byte
Score float64//8byte
}
var user User
fmt.Println(unsafe.Sizeof(user))//16byte
type User2 struct {
Age int32//4byte
Score float64//8byte
}
var user2 User
fmt.Println(unsafe.Sizeof(user2))//16byte
(2)메모리 패딩을 고려한 필드 배치 방법
type User struct {
A int8
B int
C int8
D int
E int8
}
fmt.Println(unsafe.Sizeof(User{}))//40
type User2 struct {
A int8//1byte
C int8//1byte
E int8//1byte
B int//8yte
D int//8byte
}
fmt.Println(unsafe.Sizeof(User2{}))//24
4.구조체 역할
(1)함수는 관련 코드 블록을 묶어서 응집도를 높이고 재사용성을 증가
(2)배열은 같은 타입의 데이터를 묶어서 응집도를 높임
(3)구조체는 관련된 데이터들을 묶어서 응집도를 높이고 재사용성을 증가
728x90
반응형