[Go] ํฌ์ธํ„ฐ

Go์˜ ํฌ์ธํ„ฐ๋Š” C/C++ ๋“ฑ์˜ ํฌ์ธํ„ฐ์™€ ๋น„์Šทํ•˜๋ฉด์„œ๋„ ์–ด๋–ค ๋ถ€๋ถ„์—์„œ๋Š” ์ข€ ์ด์ƒํ•˜๊ฒŒ ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค.




๊ธฐ๋ณธ ๋ฌธ๋ฒ•

ํฌ์ธํ„ฐ์˜ ํƒ€์ž…์€ *T์˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋˜๋ฉฐ, ํฌ์ธํ„ฐ๊ฐ’์˜ ์ฐธ์กฐ๋Š” & ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
์—ฌ๊ธฐ๊นŒ์ง€๋Š” C์™€ ๋‹ค๋ฅผ๋ฐ”๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค.

๊ทธ๋ž˜์„œ C์ฒ˜๋Ÿผ ํ•จ์ˆ˜๋กœ ๋ชจ๋“ˆํ™”๋ฅผ ํ• ๋•Œ๋„ ํฌ์ธํ„ฐ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธฐ๋Š” ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ณดํ†ต์ด๋‹ค.




Receiver์—์„œ์˜ ํฌ์ธํ„ฐ

Receiver๋Š” ๋ฉ”์„œ๋“œ ์ •์˜์‹œ์— this ๋ฐ”์ธ๋”ฉ์„ ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์„ ๋งํ•œ๋‹ค.
์—ฌ๊ธฐ์—๋„ ํฌ์ธํ„ฐ๊ฐ€ ๋งŽ์ด ๋“ค์–ด๊ฐ€๋Š”๋ฐ, ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ๊ณผ ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š” ๊ฒƒ์—๋Š” ํฐ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

๋ฆฌ์‹œ๋ฒ„๋„ ์‚ฌ์‹ค ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋™์ž‘๋ฐฉ์‹์ด ํฐ ์ฐจ์ด๊ฐ€ ์—†๋‹ค.
๊ทธ ๋ง์ธ์ฆ‰์Šจ, ํฌ์ธํ„ฐ๋กœ ์ „๋‹ฌ๋ฐ›์•˜์„ ๋•Œ๋Š” ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ณ , ํฌ์ธํ„ฐ๊ฐ€ ์•„๋‹๋•Œ๋Š” ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ด๊ฑด Rust์—์„œ์˜ self, &mut self์˜ ์ฐจ์ด์™€ ๊ฐ™๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋ ‡๊ฒŒ ํฌ์ธํ„ฐ๋กœ ๋ฆฌ์‹œ๋ฒ„๋ฅผ ๋ฐ›์„ ๊ฒฝ์šฐ์—๋Š”

ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด ์ด๋Ÿฐ์ €๋Ÿฐ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ž˜ ๋™์ž‘ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๊ทธ๋ƒฅ ๊ฐ’์œผ๋กœ ๋ฐ›์„ ๊ฒฝ์šฐ์—๋Š”

๊ทธ ์ˆ˜์ •์‚ฌํ•ญ์ด ์›๋ณธ์— ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š”๋‹ค.
ํฌ์ธํ„ฐ๋กœ ๋ฐ›์ง€ ์•Š๊ณ  ๊ฐ’ ํƒ€์ž…์œผ๋กœ ๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’๋งŒ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ๊ฐ€ ๋๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฐ’ ํƒ€์ž…์˜ Receiver๋Š” ๋ถˆ๋ณ€ ๋ฉ”์„œ๋“œ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.




์ธํ„ฐํŽ˜์ด์Šค์™€ ํฌ์ธํ„ฐ

Golang์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฝค๋‚˜ ๋…ํŠนํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.
๊ทธ๋ž˜์„œ C++๋‚˜ Rust์ฒ˜๋Ÿผ ์™„์ „ rawํ•œ ๊ตฌ์กฐ๋ฅผ ์–ธ์–ด๋ฅผ ๋จผ์ € ์ ‘ํ–ˆ๋‹ค๋ฉด ๋‹นํ™ฉ์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ๋‹ค.

Golang์˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํƒ€์ž… ์ •๋ณด์— ๊ทธ์น˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ทธ ์ž์ฒด๋กœ ๋ฐ•์‹ฑ๋œ ํฌ์ธํ„ฐ ๊ฐ์ฒด๋‹ค.
๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ํƒ€์ž…๋“ค์€ ํฌ์ธํ„ฐ๋ฅผ *T์˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•˜์ง€๋งŒ, ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” ํฌ์ธํ„ฐ ํ‘œํ˜„์„ ๋ถ™์ด์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
C++์—์„œ ๋Š˜์ƒ ํ„ฐ์ง€๋Š” ์Šฌ๋ผ์ด์‹ฑ ๋ฌธ์ œ ๊ฐ™์€ ๊ฒƒ๋„ ์—†๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๊ณ 

๊ตฌํ˜„์ฒด๊ฐ€ ์žˆ๋‹ค๋ฉด

๊ทธ๋ƒฅ ๋กœ์ปฌ ๊ฐ์ฒด์˜ ํฌ์ธํ„ฐ๋ฅผ ์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ๋ง‰ ๋•Œ๋ ค๋ฐ•์•„๋„ ๋œ๋‹ค.

Rust๋‚˜ C/C++์—์„œ๋Š” ๊ฟˆ๋„ ๋ชปํ•  ํ–‰์œ„์ง€๋งŒ, Go๋Š” ๋œ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์•Œ์•„์„œ ๋ฐ•์‹ฑ์„ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.