Go Pointers!

Pointers!

C,C++와 마찬가지로 Go에서는 메모리에 직접 접근이 가능하다.

즉 Low-Level Programming이 가능하다는 얘기이다.

아래의 예제를 보자

package main

import "fmt"

func main() {
	a := 2
	b := a
	fmt.Println(a,b)
}

a는 2, b 역시 2를 출력한다.

package main

import "fmt"

func main() {
	a := 2
	b := a
	a = 10
	fmt.Println(a,b)
}

이 경우라면 10,2가 출력될 것이다.

package main

import "fmt"

func main() {
	a := 2
	b := a
	a = 10
	fmt.Println(&a,&b)
}

C에서 사용했던 것과 마찬가지로 주소 값을 확인할 수 있다.

주소 값은 일반적으로 해당 변수가 할당된 메모리의 시작 주소이다.

과거 학부생 시절 C를 주력으로 써왔던 나로써는 아주 반갑다 ^^

package main

import "fmt"

func main() {
	a := 2
	b := &a
	fmt.Println(&a,b)
}

C에서 많이 봐오던 그것이다.

C와 UNIX를 개발한 아저씨가 개발해서 그런지 C의 개념이 그대로 녹아있다.

package main

import "fmt"

func main() {
	a := 2
	b := &a
	fmt.Println(*b)
}

당연히 역참조 연산자도 사용가능하며 b는 2를 출력한다.

Go에서 포인터를 지원하는게 놀라운 일은 아닐 것이다.

성능을 중요시하는 언어이기 때문에 Low-Level Programming을 지원하는 것 또한 당연하다고 느껴진다.

C에서 포인터로 매운 맛을 본 나로써는 이 파트가 아주 쉬웠지만 만약 C를 모르는 개발자라면 여기서 조금 어려울 수도 있겠다는 생각이 든다.

결국 컴퓨터공학과에서 C언어로 시작하는 것에 많은 컴공과 대학생들이 불만의 소리를 내고 있지만(나도 그랬고) 결과적으로는 C를 배움으로써 메모리와 컴퓨터를 이해하는데 결정적인 역할을 했다고 생각한다.

Reference

Nomad Coder - 니꼴라스 선생님



© 2022. by minkuk

Powered by minkuk