[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