상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - Go 언어의 포인터(pointer) 사용법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Go 언어에서 포인터(pointer)는 메모리 주소를 직접 다루는 기능을 제공합니다. 포인터를 사용하면 변수의 메모리 주소를 참조하고, 이를 통해 변수의 값을 직접 수정하거나, 메모리 효율성을 높일 수 있습니다. Go 언어의 포인터 사용법에 대해 자세히 알아보겠습니다. 1. 포인터의 기본 개념 포인터는 특정 변수의 메모리 주소를 저장하는 변수입니다. Go 언어에서 포인터는 `*` 기호를 사용하여 정의합니다. 예를 들어, `*int`는 정수형 포인터를 의미합니다. 2. 포인터 선언 및 초기화 포인터를 선언하려면, 변수의 타입 앞에 `*`를 붙입니다. 포인터를 초기화하려면, `&` 연산자를 사용하여 변수의 주소를 가져옵니다. ```go package main import "fmt" func main() { var a int = 42 var p *int = &a // a의 주소를 p에 저장 fmt.Println("a의 값:", a) // 42 fmt.Println("p가 가리키는 값:", *p) // 42 } ``` 3. 포인터를 통한 값 수정 포인터를 사용하면 변수의 값을 직접 수정할 수 있습니다. 포인터가 가리키는 메모리 주소의 값을 변경하면, 원래 변수의 값도 변경됩니다. ```go package main import "fmt" func main() { var a int = 42 var p *int = &a // a의 주소를 p에 저장 *p = 100 // p가 가리키는 주소의 값을 100으로 변경 fmt.Println("a의 값:", a) // 100 } ``` 4. 포인터와 함수 포인터는 함수에 인자를 전달할 때 유용합니다. 포인터를 사용하면 큰 데이터 구조체를 복사하지 않고도 함수에 전달할 수 있습니다. 이를 통해 메모리 사용을 최적화하고 성능을 향상시킬 수 있습니다. ```go package main import "fmt" func increment(n *int) { *n++ // n이 가리키는 값을 증가시킴 } func main() { var a int = 10 increment(&a) // a의 주소를 전달 fmt.Println("a의 값:", a) // 11 } ``` 5. nil 포인터 Go 언어에서 포인터는 `nil` 값을 가질 수 있습니다. 이는 포인터가 어떤 유효한 메모리 주소도 가리키지 않음을 의미합니다. nil 포인터를 역참조하려고 하면 런타임 오류가 발생하므로, nil 포인터를 사용할 때는 항상 주의해야 합니다. ```go package main import "fmt" func main() { var p *int // p는 nil 포인터 if p == nil { fmt.Println("p는 nil입니다.") } } ``` 6. 포인터와 배열, 슬라이스 Go 언어에서 배열이나 슬라이스를 포인터로 다룰 수 있습니다. 배열의 경우, 배열의 첫 번째 요소의 주소를 통해 포인터를 생성할 수 있습니다. ```go package main import "fmt" func main() { arr := [3]int{1, 2, 3} p := &arr[0] // 배열의 첫 번째 요소의 주소를 p에 저장 fmt.Println("p가 가리키는 값:", *p) // 1 *p = 10 // p가 가리키는 값을 변경 fmt.Println("arr의 값:", arr) // [10 2 3] } ``` 슬라이스는 내부적으로 배열을 사용하므로, 슬라이스의 포인터를 통해 배열의 요소를 수정할 수 있습니다. 7. 구조체와 포인터 구조체를 포인터로 다루면, 구조체의 필드를 직접 수정할 수 있습니다. 이는 특히 큰 구조체를 함수에 전달할 때 유용합니다. ```go package main import "fmt" type Person struct { Name string Age int } func updateAge(p *Person, newAge int) { p.Age = newAge // 포인터를 통해 Age 필드 수정 } func main() { person := Person{Name: "Alice", Age: 30} updateAge(&person, 35) // person의 주소를 전달 fmt.Println("Updated Age:", person.Age) // 35 } ``` 8. 결론 Go 언어에서 포인터는 메모리 주소를 직접 다루는 강력한 도구입니다. 포인터를 사용하면 변수의 값을 직접 수정할 수 있고, 함수에 인자를 효율적으로 전달할 수 있습니다. 그러나 포인터를 사용할 때는 nil 포인터와 같은 오류를 피하기 위해 주의해야 합니다. 포인터의 개념을 잘 이해하고 활용하면 Go 언어로 더 효율적이고 성능이 뛰어난 프로그램을 작성할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기