GoLang_Question

wldbs._.·2024년 8월 7일

GoLang

목록 보기
1/6
post-thumbnail

슬라이스

1. 길이와 용량의 차이점?

  • 길이는 슬라이스에 포함된 요소의 수
  • 용량은 기본 배열이 할당할 수 있는 최대 요소 수 (슬라이스 길이보다 항상 크거나 같다)

추가로. 슬라이스의 포인터는 슬라이스가 참조하는 기본 배열의 첫 번째 요소를 가리킨다.

  • 즉, 슬라이스의 포인터는 첫 번째 요소의 메모리 주소값을 가진다.

2. := 와 = 의 차이점?

  • := (짧은 변수 선언): 변수를 선언하면서 동시에 값 할당
    • 함수 본문 내에서만 사용 가능
    • 새로운 변수를 선언하는 경우에만 사용
    • 코드의 간결성 높인다
  • = (대입 연산자): 이미 선언된 변수에 새로운 값 할당
    • 변수 선언 위치와 관계없이 사용 가능

3. 배열 vs 슬라이스 복사

slice 값이 slice2로 복사되면 구조체의 각 필드값이 복사되는 것인데, 여기서 동일한 메모리 주솟값을 가지기에 slice와 slice2 모두 같은 배열 데이터를 가리키게 된다.

  • 따라서 한 슬라이스의 값을 수정하면 다른 슬라이스도 그 변경 사항을 반영한다.
  • 메모리 주소값은 데이터가 저장된 위치를 나타내기 때문에, 동일한 주소를 가진 포인터는 같은 메모리 위치에 저장된 데이터를 참조
  • 두 슬라이스가 독립적으로 동작하기를 원한다면, 새로운 배열을 할당하고 그 값을 복사하는 copy 함수를 사용

배열은 배열의 모든 값이 복사되는 것으로, arr 값이 arr2로 복사되더라도 둘은 메모리 공간이 다른 완전히 다른 배열이다.


메서드

4. 구조체 밖에 메서드를 정의한다?

= 메서드가 구조체의 필드와 별도로 선언되어, 특정 타입(구조체)에 대해 동작을 정의하는 방법
메서드를 정의하려면 함수 정의와 비슷하게 작성하지만, 함수 이름과 매개변수 리스트 사이에 메서드가 적용될 수신자(receiver)를 명시

  • 수신자는 메서드가 어떤 타입에 속하는지를 지정
package main

import "fmt"

// Person 구조체 정의
type Person struct {
    Name string
    Age  int
}

// Person 구조체에 대한 메서드 정의
func (p Person) Greet() { // 여기서 (p Person)은 Greet 메서드가 Person 타입의 값을 수신자로 가진다는 것을 나타냄
    fmt.Printf("Hello, my name is %s and I am %d years old.\n", p.Name, p.Age)
}

func main() {
    // Person 구조체의 인스턴스 생성
    p := Person{Name: "Alice", Age: 30}
    // Greet 메서드 호출
    p.Greet() // 출력: Hello, my name is Alice and I am 30 years old.
}

profile
공부 기록용 24.08.05~ #LLM #RAG

0개의 댓글