๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Data Base/Go

[์‰ฝ๊ณ  ๋น ๋ฅธ Go ์‹œ์ž‘ํ•˜๊ธฐ] #1.8 Pointers!

by ์ฝ”๋”ฉํ•˜๋Š” ๋ถ•์–ด 2021. 10. 29.
๋ฐ˜์‘ํ˜•

[์ถœ์ฒ˜ - Nomad Coders]

 

 

a์˜ ๊ฐ’์„ ๋ฐ”๊ฟ”๋„ b์˜ ๊ฐ’์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค!

package main

import "fmt"

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

 

 

 

package main

import "fmt"

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

 

 

 

๋ฌด์—‡์ธ๊ฐ€์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ณด๊ณ  ์‹ถ์„๋• '&'๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

& = address

// ๋ฌด์—‡์ธ๊ฐ€์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ณด๋Š” ๋ฐฉ๋ฒ•

package main

import "fmt"

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

๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค.

b := &a
package main

import "fmt"

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

๋‘˜์ด ๊ฐ™์€ ๊ฐ’์ด ์ถœ๋ ฅ๋˜๊ณ  ์žˆ๋‹ค.

a์˜ ๊ฐ’์€ ์•ž์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๊ณ  ์žˆ๊ณ 

b๋Š” a์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด๊ณ ์žˆ๋‹ค.

 

 

 

 

๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์‚ดํŽด๋ณด๊ณ ์‹ถ๋‹ค๋ฉด '*'๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

package main

import "fmt"

func main() {
	a := 2
	b := &a
	fmt.Println(*b) // *๋Š” ์‚ดํŽด๋ณด๊ฑฐ๋‚˜ ํ›‘์–ด๋ณธ๋‹ค๋Š” ๋Š๋‚Œ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
}

*๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด b์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

*address = something์„ ํ•˜๋ฉด address์— ๋‹ด๊ธด ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด b์˜ ๊ฐ’์„ ๋ณด๊ณ  ์žˆ๋Š”๋ฐ, b๋Š” a์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ’์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” 2๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋ฌด๊ฑฐ์šด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๋•Œ ๋งค์šฐ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฐœ๋…์ด๋‹ค!

 

 

 

๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡์ธ๊ฐ€์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์œผ๋ฉด (๊ทธ๊ฒƒ์˜ ์ฃผ์†Œ์— ๋‹ด๊ธด ๊ฐ’)

์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

// 1
package main

import "fmt"

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

// 2
package main

import "fmt"

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

b์˜ ๊ฐ’๋„ ๋”ฐ๋ผ์„œ ๋ณ€๊ฒฝ๋œ๋‹ค.

 

 

 

package main

import "fmt"

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

b๋Š” a๋ฅผ ์‚ดํŽด๋ณด๋Š” ํฌ์ธํ„ฐ๋‹ˆ๊นŒ a์˜ ๊ฐ’์ด ๋ฐ”๋€๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€