반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- PKI
- 분산 식별자
- RSA
- 애플 달팽이
- rust
- 반복문
- Python 강좌
- 구피
- MSSQL
- Feign
- 주말농장
- golang 강좌
- MSA
- 체리새우
- rust 강좌
- did
- Tendermint
- 텐더민트
- 가재
- 물생활
- Config server
- 무화과
- rust 소개
- 쌈채소
- 조건문
- 카디날
- 분산 신원
- for
- 기본문법
- 치비
Archives
- Today
- Total
comnic's Dev&Life
[Golang] 6. 데이터 구조(배열과 슬라이스, 맵과 구조체) 본문
반응형
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 언어에서 데이터를 효과적으로 구조화하고 조작하는 데 사용되며, 각각의 특징과 용도에 따라 적절한 상황에서 활용됩니다.
반응형
'Golang' 카테고리의 다른 글
[Golang] 8. 테스트(Testing, Coverage) (1) | 2023.12.31 |
---|---|
[Golang] 7. 동시성과 병렬성(고루틴, 채널) (0) | 2023.12.30 |
[Golang] 5. 패키지(Package) (1) | 2023.12.30 |
[Golang] 4. 함수(Function) (1) | 2023.12.29 |
[Golang] 3. 기본문법(변수와 상수, 데이터 타입, 조건문과 반복문) (1) | 2023.12.23 |
Comments