[Go] ๋”์ฐํ•œ Receiver Name Rule

๊ทธ๋ƒฅ ๋‚ด ๋ถˆํ‰๋ถˆ๋งŒ์„ ์จ๋†“์€ ๊ธ€์ด๋‹ค.

์ผ๋‹จ ๊ณ ํผ๋“ค์€ ์ด์ƒํ•  ์ •๋„๋กœ ๋Œ€์ถฉ ์ง€์€ ์ด๋ฆ„์— ๊ด€๋Œ€ํ•˜๋‹ค.

์–ธ์–ด๋ฅผ ์ดˆ์›”ํ•ด์„œ ๋ณ€์ˆ˜๋ช…์€ ์ถ•์•ฝ ์—†์ด ๋ช…ํ™•ํ•˜๊ฒŒ ์ง“์ž๋Š”๊ฒŒ ํ•ฉ์˜๊ฐ€ ๋œ ์ƒํ™ฉ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๋Œ€์ถฉ ์ถ•์•ฝํ•œ ๋ณ€์ˆ˜๋ช…์„ ๋‚จ๋ฐœํ•˜๋Š” ๋ฌธํ™”๊ฐ€ ๋งŒ์—ฐํ•˜๋‹ค. context๋ฅผ ctx๋กœ ์ค„์ด๋Š”๊ฑด ์˜ˆ์‚ฌ๊ณ , SomethingFunctionFactory ๊ฐ™์€ ๊ธด ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋„ ๊ทธ๋ƒฅ sff ๊ฐ™์€ ์‹์œผ๋กœ ๋Œ€์ถฉ ์น˜๊ณ  ์ง€๋‚˜๊ฐ€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งค์šฐ ๋งŽ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๋‹ค๊ณ  ์น˜์ž. ๊ทผ๋ฐ ๋ฆฌ์‹œ๋ฒ„ ๋„ค์ž„ ๋ฃฐ์— ๋Œ€ํ•ด์„œ๋„ ์ด์ƒํ•œ ์ž๊ธฐ๋“ค๋งŒ์˜ ๊ทœ์น™์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.
Go์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š”๋ฐ

func (st SomeType) DoSomething() {
    // ...
}

์‚ฌ์‹ค ์ € (st SomeType)๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ์˜ this ๋ฐ”์ธ๋”ฉ๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅผ ๊ฒƒ์ด ์—†๋‹ค.
ํŒŒ์ด์ฌ์˜ self, ๋Ÿฌ์ŠคํŠธ์˜ self์™€๋„ ์‚ฌ์‹ค์ƒ ๋™๋“ฑํ•œ ๊ธฐ๋Šฅ์ด๋‹ค.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Go ํ‘œ์ค€ ์ปจ๋ฒค์…˜ ๊ฐ€์ด๋“œ์—์„œ๋Š” ๊ทธ๋ƒฅ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ •์˜ํ•˜๋ผ๊ณ ๋งŒ ๊ฐ•์š”ํ•œ๋‹ค. ๋ฆฐํ„ฐ์—์„œ๋„ ํŒฌ๋‹ค.
https://github.com/golang/go/wiki/CodeReviewComments#receiver-names
์ด์— ๋Œ€ํ•ด์„œ ๋ณ„๋‹ค๋ฅธ ์‹ค์šฉ์ ์ธ ๊ทผ๊ฑฐ๋Š” ์—†๋‹ค. ๊ทธ๋Ÿด๋“ฏํ•˜๊ฒŒ ์จ๋†จ์ง€๋งŒ ์‹ค์†์€ ์—†๋‹ค.
๊ทธ๋ƒฅ ํ•˜์ง€ ๋ง๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

์˜จ๊ฐ– ์ถ•์•ฝ์œผ๋กœ ๊ฐ€๋“ํ•œ ์‹๋ณ„์ž ์ง€์˜ฅ์œผ๋กœ ๊ฐ€๋“์ฐฌ ์ด ์ฝ”๋“œ๊ฐ€ ๊ดœ์ฐฎ์•„ ๋ณด์ด๋‚˜?

func (sir ShopImageResource) ProcessImage(mr MachineRange) float64 {
	switch sir.Vls{
	case mr.Some:
		return 1
	case mr.To:
		return float64(2) / float64(3)
	case mr.Tree:
		return float64(3) / float64(4)
	case mr.Apple:
		return float64(4) / float64(5)
	case mr.FooBar:
		return float64(self.Width) / float64(self.Height)
	default:
		return 1
	}
}

์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ self๋‚˜ this๋กœ ์ปจํ…์ŠคํŠธ๋ฅผ ์ •์˜ํ•œ ๊ฒƒ์ด ๋‚˜์•„๋ณด์ด๋‚˜?

func (self ShopImageRatioOption) ProcessImage(mr MachineRange) float64 {
	switch sir.Vls{
	case mr.Some:
		return 1
	case mr.To:
		return float64(2) / float64(3)
	case mr.Tree:
		return float64(3) / float64(4)
	case mr.Apple:
		return float64(4) / float64(5)
	case mr.FooBar:
		return float64(self.Width) / float64(self.Height)
	default:
		return 1
	}
}

๋ฆฌ์‹œ๋ฒ„๋Š” ์‚ฌ์‹ค์ƒ ํ•ด๋‹น ํ•จ์ˆ˜ ์˜์—ญ์—์„œ๋Š” ๊ณ ์œ ํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์˜จ๊ฐ– ๋ณ€์ˆ˜๋ฅผ ๋’ค์„ž๊ธฐ๋ณด๋‹จ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž๋ฅผ ํ•˜๋‚˜ ์ •ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ณด๊ธฐ ์ข‹๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” this๋‚˜ self ๊ฐ™์€ ๊ณ ์œ ํ•œ ํ‚ค์›Œ๋“œ๋กœ ์ •์˜๋ฅผ ํ•˜๋Š” ํŽธ์ด ๋” ์ง๊ด€์ ์ด๊ณ  ์ƒ์‚ฐ์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์ด ๋›ฐ์–ด๋‚˜๋‹ค๊ณ  ์ฃผ์žฅํ•˜๊ฒ ๋‹ค.
๋Œ€๊ด€์ ˆ ์ €๋”ฐ์œ„๋กœ ์ฝ”๋“œ๋ฅผ ์งค ์ด์œ ๊ฐ€ ์–ด๋””์— ์žˆ๋‹จ ๋ง์ธ๊ฐ€?

Go ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ํ•ญ์ƒ ์ž๊ธฐ๋“ค์ด ์‹ค์šฉ์ ์ด๋ผ๊ณ  ์ฃผ์žฅํ•˜์ง€๋งŒ, ์‚ฌ์‹ค์€ ์ž๊ธฐ๋“ค๋งŒ์˜ ์•„์ง‘์— ๊ฐ‡ํ˜€์žˆ๋Š” ๋ถ€๋ถ„์ด ์ƒ๋‹นํžˆ ๋งŽ๋‹ค๊ณ  ๋А๋‚€๋‹ค.

์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์— ๋“ค์–ด๊ฐ€๋ฉด ์ด์— ๋Œ€ํ•œ ๋…ผ์Ÿ์ด ์ข€ ์žˆ๋‹ค.
https://stackoverflow.com/questions/23482068/in-go-is-naming-the-receiver-variable-self-misleading-or-good-practice



์ฐธ์กฐ
https://stackoverflow.com/questions/23482068/in-go-is-naming-the-receiver-variable-self-misleading-or-good-practice