Go는 높은 수준의 코드로 Low-level Programming을 하도록 해준다고 한다.
여기서는 간단하게 &와 *를 살펴보자.
하기전에 아래 코드를 보면 10과 2가 출력된다.
package main
import "fmt"
func main() {
a := 2
b := a
a = 10
fmt.Println(a, b)
}
// 10 2
&을 추가하면 메모리 주소를 볼 수가 있다. a는 메모리 주소가 12088인 곳에 있고
b는 메모리 주소가 120a0인 곳에 있다고 볼 수 있다.
package main
import "fmt"
func main() {
a := 2
b := 5
fmt.Println(&a, &b)
}
// 0xc000012088 0xc0000120a0
이제는 b가 a의 메모리를 살펴보고 있는지를 한번 보자.
package main
import "fmt"
func main() {
a := 2
b := &a
fmt.Println(&a, b)
}
// 0xc000012088 0xc000012088
*도 이용해보면 *는 기본적으로 살펴보거나 훑어본다는 느낌으로 사용이 된다. 즉 메모리의 주소를 살펴볼 수 있다.
아래를 보면 b는 a의 메모리 주소값이고 2가 나타나는 것을 볼 수 있다.
메모리에 저장된 object를 똑같이 서로 가지고 싶어할 때 사용이 되어진다.
package main
import "fmt"
func main() {
a := 2
b := &a
fmt.Println(*b)
}
// 2
아래코드에서 b는 a의 메모리 주소에 연결이 되어있고 a가 바뀌면 b는 a의 메모리를 살펴보고 당연하게 값이 바뀌게 된다.
package main
import "fmt"
func main() {
a := 2
b := &a
a = 5
fmt.Println(*b)
}
// 5
b를 가지고도 a의 값을 변경 시킬 수 있다. b를 이용해서 a의 값을 변경 시킬 수 있는 것이다.
b는 a의 주소와 연결이 되어있는데 아래를 보면 a가 20이 되었다.
package main
import "fmt"
func main() {
a := 2
b := &a
*b = 20
fmt.Println(a)
}
// 20
<출처 노마드 코더: 쉽고 빠른 Go 시작하기>
https://nomadcoders.co/go-for-beginners/lobby
Watch Now – 노마드 코더 Nomad Coders
nomadcoders.co
'Golang' 카테고리의 다른 글
Maps & Structs (0) | 2021.12.12 |
---|---|
Arrays & Slices (0) | 2021.12.12 |
if & switch (0) | 2021.12.12 |
for&range&args (0) | 2021.12.12 |
Functions (2) (0) | 2021.12.11 |