Golang
[Golang] 6. 데이터 구조(배열과 슬라이스, 맵과 구조체)
comnic
2023. 12. 30. 10:04
반응형
6. 데이터 구조(배열과 슬라이스, 맵과 구조체)
6.1 배열과 슬라이스
배열(Array):
- 고정된 크기의 요소로 이루어진 데이터 구조입니다.
- 배열의 크기는 타입과 함께 정의되며, 한 번 정의된 크기는 변경할 수 없습니다.
package main
import "fmt"
func main() {
// 배열의 정의와 초기화
var numbers [5]int
numbers = [5]int{1, 2, 3, 4, 5}
// 배열 순회
for i := 0; i < len(numbers); i++ {
fmt.Println(numbers[i])
}
}
슬라이스(Slice):
- 동적 크기의 데이터 구조로, 배열의 일부를 가리키는 참조 형태입니다.
- 슬라이스는 배열의 일부를 나타내기 때문에 크기가 동적으로 조절 가능합니다.
package main
import "fmt"
func main() {
// 슬라이스의 정의와 초기화
numbers := []int{1, 2, 3, 4, 5}
// 슬라이스 순회
for _, num := range numbers {
fmt.Println(num)
}
}
- append 함수를 사용하여 슬라이스에 새로운 요소를 추가할 수 있습니다.
package main
import "fmt"
func main() {
// 슬라이스의 동적인 특성
numbers := []int{1, 2, 3, 4, 5}
// 새로운 요소 추가
numbers = append(numbers, 6)
fmt.Println(numbers) // [1 2 3 4 5 6]
}
슬라이스의 장점:
- 크기가 동적이므로 메모리 관리가 편리하고 유연합니다.
- 배열과는 달리 슬라이스는 값 복사가 아닌 참조를 통해 작동하므로 성능 상의 이점이 있습니다.
6.2 맵과 구조체
맵(Map):
- 키-값 쌍으로 이루어진 데이터 구조입니다.
- 맵은 동적으로 크기가 조절되며, 키를 통해 값을 검색하고 저장할 수 있습니다.
package main
import "fmt"
func main() {
// 맵의 정의와 초기화
person := map[string]interface{}{
"name": "Alice",
"age": 30,
"isMale": false,
}
// 맵 값 조회
fmt.Println("Name:", person["name"])
fmt.Println("Age:", person["age"])
}
구조체(Struct):
- 서로 다른 데이터 타입의 필드들을 묶어 놓은 사용자 정의 데이터 타입입니다.
- 구조체는 필드의 이름으로 각각의 값을 식별할 수 있습니다.
package main
import "fmt"
// Person 구조체 정의
type Person struct {
Name string
Age int
IsMale bool
}
func main() {
// 구조체의 사용
person := Person{
Name: "Bob",
Age: 25,
IsMale: true,
}
// 구조체 필드 조회
fmt.Println("Name:", person.Name)
fmt.Println("Age:", person.Age)
}
6.3 메소드와 인터페이스 소개
메소드(Method):
- 구조체나 사용자 정의 타입에 함수를 연결하여 해당 타입에 특화된 동작을 정의합니다.
- 메소드는 특별한 형태의 함수로, 특정 타입과 연관된 동작을 수행합니다.
package main
import "fmt"
// Rectangle 구조체 정의
type Rectangle struct {
Width float64
Height float64
}
// Area 메소드 정의
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
func main() {
// 메소드의 사용
rectangle := Rectangle{Width: 5, Height: 10}
area := rectangle.Area()
fmt.Println("Area:", area)
}
인터페이스(Interface):
- 메소드 집합을 나타내는 추상 타입입니다.
- 인터페이스를 구현하는 타입은 인터페이스의 모든 메소드를 정의해야 합니다.
package main
import "fmt"
// Shape 인터페이스 정의
type Shape interface {
Area() float64
}
// Rectangle 구조체가 Shape 인터페이스를 구현
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
func main() {
// 인터페이스의 사용
rectangle := Rectangle{Width: 5, Height: 10}
// Shape 인터페이스 변수에 할당
var shape Shape
shape = rectangle
// 인터페이스 메소드 호출
area := shape.Area()
fmt.Println("Area:", area)
}
이러한 데이터 구조들은 Go 언어에서 데이터를 효과적으로 구조화하고 조작하는 데 사용되며, 각각의 특징과 용도에 따라 적절한 상황에서 활용됩니다.
반응형