๋๋ถ๋ถ ๊ด์ฌ๋ ์๋ goto ๋ก๋ฐฅ ๊ธ ํ๋ ๋ ์ฌ๋ฆฌ๋ ๊ฒ ๊ฐ์ง๋ง ๋ ํ๊ณ ์ถ์ ์ด์ผ๊ธฐ๊ฐ ์์ด์ ์จ๋ด.
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด,
goto ๋ฌธ์ ์ฐ์ง ๋ง์์ผํ ๊ฐ์ฅ ํฐ ์ด์ ๋ ๊ฐ๋ ์ฑ(Readability) ๋ฌธ์ ์ด๋ค.
ํ๋ก๊ทธ๋๋ฐํ ๋ ์ฐ๋ฆฌ๋ ์ฐ๊ธฐํธํ ์ฝ๋๋ณด๋ค ๊ฐ๋ ์ฑ ๋์ ์ฝ๋๋ฅผ ์์ฐํด์ผํ๋ค.
์ฝ๋๋ฅผ ์์ฑํ ๋์ ๋ด ๋จธ๋ฆฟ ์์๋ ๊ทธ์ ๊ด๋ จ๋ ์ ๋ณด๋ค๋ก ๊ฐ๋ํ์ง๋ง ํ์จ ์๊ณ ๋๋ฉด ๋ค ์ํ์ง๊ฒ ๋ง๋ จ.
์์ ํ๋ ค๋ฉด ๋จธ๋ฆฟ์์ ์ด์ ์ ์์ฑํ๋ ์ ๋ณด๋ฅผ ์ฌ๊ตฌ์ฑํด์ผํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
ํ๋ก๊ทธ๋๋ฐ ๊ณผ์ ์ ์ฐ์ด๋ ์๊ฐ์ด๋ ์๋์ง๋ฅผ ๋น๊ตํด๋ณด๋ฉด
์ฝ๋ ๊ทธ ์์ฒด๋ฅผ ์ฐ๋ ์๊ฐ๋ณด๋ค, ์ด๋ ๊ฒ ์ด๋ฏธ ์จ๋์ ์ฝ๋๋ฅผ ๋จธ๋ฆฟ์์ ๋ค์ ์ดํด์ํค๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์.
๊ฐ๋ ์ฑ์ด ๋ฎ์ ์ฝ๋์ผ ์๋ก ๋์ฑ ๊ทธ๋ฌํ๋ฐ, ํํ ๋งํ๋ ์คํ๊ฒํฐ ์ฝ๋๋ฅผ ์๊ฐํด๋ณด๋ฉด ์ดํดํ๊ธฐ ์ด๋ ต์ง ์์ ๊ฑฐ๋ค.
์ด๊ฑด ํผ์ ๊ฐ๋ฐํ๋ ๊ฐ์ด ๊ฐ๋ฐํ๋ ๋๊ฐ์ ๋ฌธ์ .
ํผ์ ๊ฐ๋ฐํ๋๋ผ๋ ๋๋ ๋ด๊ฐ ๋ง๋ ์ฝ๋์ ๋ ์๋ผ๋ ์ ์ผ ์๊ฐํด์ผํจ.
์ฝ๋๋ฅผ ๋ค์ ๋ณด๋๋ผ๋ ์ดํดํ๋๋ฐ ์๊ฐ์ด ์ ๊ฒ ๊ฑธ๋ฆด์๋ก ์ฐ๋ฆฌ ์์ฐ์ฑ์ ๋์์ง ๊ฒ์ด๊ณ ๋ฒ๊ทธ๋ ์ค์ด๋ค ๊ฒ์ด๊ณ ์ถ์๋ ์ง๋ฅผ ํ๋ฃจ๋ผ๋ ๋น๊ธธ ์ ์์๊ฑฐ๋ค.
goto ๋ฌธ์ ๊ทธ๋ฐ ์๋ฏธ์์ ์ฐ๊ธฐ์ ๋งค์ฐ ์ง๊ด์ ์ด์ง๋ง ์ฝ๊ธฐ์๋ ๋งค์ฐ ๋ํดํ๋ค.
๋๊ตฐ๋ฐ ์ด์์ฐ์ด๊ฒ๋๋ฉด ์ฝ๋๊ฐ ๊ธ๋ฐฉ ์ํธ๋ฌธ์ผ๋ก ๋ฐ๋๊ฒ ๋๋ค.
๋จ์ด ์ฝ๊ธฐ์๋, ๋ด๊ฐ ์ฝ๊ธฐ์๋ ํ๋ค๊ฒ ๋๋๊ฑฐ๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋ถ๋ถ์๊ฒฝ์ฐ goto๋ฅผ ๋์ฒดํ ์ธ์ด์ ๋ฌธ๋ฒ์ ์ธ ์ง์์ด๋ ํ
ํฌ๋์ด ์์ผ๋
์ด๋ฐ ์ฐ๊ธฐํธํ ์ฝ๋์ ๋ฌ์ฝคํ ์ ํน์ ๋ฉ๋ฆฌํ๊ณ ํ๋ก๊ทธ๋๋ฐ ํ ํฌ๋์ ์ข ๋ ์ตํ Readability๋ฅผ ๋์ฌ๋ณด๋๋ก ํ์.
์๋๋ ๊ฐ๋ ์ฑ ๋์ ์ฝ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๋ช๊ฐ์ง ํ.
1. var ์ ๋ชจํธ์ฑ[C#]
var f = GetMagicNumber();
var total = 100 * f / 6;
Console .WriteLine( $"Declared Type: {total.GetType().Name} , Value: {total} " );
์์ ๊ฐ์ ์ฝ๋๊ฐ ์์ ๋ GetMagicNumber ๊ฐ์ ๋ฐ๋ผ ์๋์ ๊ฐ์ด ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ ์ง ์ ์๋ค.
var๋ฅผ ๋ช ํํ ํ์ ์ผ๋ก ๋ฐ๊พผ๋ค๋ฉด ์ดํดํ๊ธฐ ์ฝ๊ณ ๋ฒ๊ทธ๋ฅผ ๋ง์ ์ ์๋ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๋ค.
Declared Type: Double, Value: 166.666666666667
Declared Type: Single, Value: 166.6667
Declared Type: Decimal, Value: 166.66666666666666666666666667
Declared Type: Int32, Value: 166
Declared Type: Int64, Value: 166
2. var ์ ์ ์ ํ ์ฌ์ฉ[C#]
var newData = currentData;
newData += addFor;
return newData;
์์๊ฐ์ด ์ง์ญ๋ณ์๋ก ์ฌ์ฉ๋๋ฉฐ ์๋ก์ด ํ์ ์ ๊ตณ์ด ์ ํ์๊ฐ ์์ ๋๋ var๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ ์ฑ์ด ๋์ ์ ์๋ค.
3. ๊ณผ๋ํ๊ฑฐ๋ ๋๋ฌด ๋ปํ ์ฃผ์
// ๋น์๋ฃจ๋ฅผ ๊ณ ์์ด๋ก ๋ง๋ฌ
var temp = Magic(data);
return temp;
๋ผ๋ ์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด ๋ฐ๊พธ๋ฉด ์ฃผ์ ์์ด๋ ์ฝ๊ฒ ์ฝํ๊ฒ ๋๋ค.
var makeBroomIntoCat = Magic(data);
return makeBroomIntoCat;
4. ๋น๊ต๋ฌธ
if (data == 10) return true;
์์ ์ฝ๋๋ ์์นซํ๋ฉด
if (data = 10) return true;
๋ผ๋ ์ฝ๋๋ก ์๋ชป ํ์ดํ๋์ด์ ์ปดํ์ผ๋ฌ์๋ ์กํ์ง ์๋ ๋ฒ๊ทธ๋ฅผ ์ ๋ฐํ ์ ์๋ค.
์ด๋ฅผ ์ ์ฝํ๊ณ ๋ฌธ์ ์๋ ์ฝ๋๋ก ๋ง๋ค๊ธฐ ์ํด์๋
if (10 == data) return true;
์ด๋ ๊ฒ ๋ฐ๊ฟ์คฌ์๋ ์์ ์ค์๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
๊ทธ ์ธ์๋ Code conventions ๋ฑ ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ์ํ ์ฌ๋ฌ ๋ฐฉ๋ฒ ๋ค์ด ์๋ค.
๋ค๋ง ๊ฐ๋ ์ฑ์ด๋ ์ด๋์ ๋ ์ฃผ๊ด์ ์ผ ์ ์์ผ๋ฏ๋ก ์ค์ค๋ก ํน์ ํ์๊ณผ ๊ท์น์ ๋ง๋ค์ด ๋ณด๋๊ฒ๋ ์ข๊ฒ ๋ค.
๊ฐ๋ ์ฑ ์ธ๊ธ์๋ก ์์ฝํ ์ ์๋๊ฑธ ์ฃผ์ ์ฃผ์ ์ ์๊ฑฐ ๋ณด๋ฉด ๋๋ถํฐ ์ค์ฒํด์ผ๋จ ในใ
๊ฐ๋ ์ฑ์ด๋ ๋ง์ด ์ด๋ป๊ฒ ์ค์ฒํด์ผํ ์ง ๋ชจํธํ ์ ์์ด์ ํ์ด์จ๋ดค์ ์ธ๋ถ์ด๋ค ์ข ๋์์ด ๋์ผ๋ฉด ํด์ ์ผ๋๋ฐ ๋ณ๋ฃจ์ธ๊ฐ..?
ใ ใ ์ด๋ฐ์ํ๋ ๊ฑฐ๋ฅด์
๊ฐ์ธ์ ์ผ๋ก ๊ณผ๋ํ๊ฑฐ๋ ๋ปํ ์ฃผ์์ด์ฌ๋ ํ์์ ์ด๋ผ๋ฉด ๋ฌด์กฐ๊ฑด ํด์ฃผ๋๊ฒ ์ข๋ค๊ณ ๋ด.
Declared type๋ณด๋จ Deduced Type์ด ๋ง์๋ฏ
effective c# ์ฑ ์ ๋์ค๋ ์์ ์ใ ;
๊ทธ๋ฆฌ๊ณ ์ ์ด์ ์ถ๋ก ์ด ์๋๋ผ ํ ์์ฒด๋ฅผ ์ถ๋ ฅํ๋๊ฑฐ๋๊น declared๊ฐ ๋ง์ง
์ฌ๊ธฐ์ ๊ทธ๊ฑฐ ๋ชจ๋ฅด๊ณ goto์๊ธฐํ๋๋ ํ๋๋์์๋ฏ ์ ์ด์ ์ฐ๋๊ฒฝ์ฐ ์๊ธฐํ ๋ ๋จ์ ์ด ์๊ณ ํญ์์ฐ๋๊ฒ ์๋๋ผ ํน์ํ ๊ฒฝ์ฐ ์ด๋์ด ์ํด๋ ์ํ๋ณด๋ค ๋์ ๊ทน๋จ์ง์ ์ด ์๋ค ์ด๋ ๊ฒ ๋ง์ํ๋๋ฐ ์ ์ด์ ๋ฌผ๊ณ ๊ธฐ์ด๊ฐ์๋ค์ ํ๋๊ฑฐ์ผ?
goto ๋ง์ ์๊ธฐ๊ฐ ์๋๋ผ ์ฝ๋ ๊ฐ๋ ์ฑ์ ๊ดํ ์ด์ผ๊ธฐ์ธ๋ฐ ๋๋ ์ฆ์๋? ์๋๋ฉด ๋ด ๊ธ์ด ์ ๋ง ๊ฐ๋ ์ฑ์ด ๋ถ์กฑํ๊ฐ๋ด..
๊ทธ๋ ๊ทธ ์ฝ๋ ๊ฐ๋ ์ฑ์ด ๋จ์ ์ ์ํด์๋จ ์๊ฐ์ ์๋๋? ๋ ํด๋ ฅ์ ํค์ฐ๋ค ์ฌ๊ณ ๋ ฅ์ ์์๋?
์ฝ๋๊ฐ๋ ์ฑ์ด ๋จ์ ์ ์ํด์๋ค๋ ๋๊ฐํ๋๋ง์ ๋น์ต ํ๊ธ์ธ์ง ์ค๊ตญ์ด์ธ์ง ์ธ๊ณ์ด์ธ์ง ๋ชจ๋ฅด๊ฒ ๋ค. ์ฝ๋ ๊ฐ๋ ์ฑ์ ์ค์ํ๊ฒ ์๊ฐ์ํ ์๋ ์์ง๋ง ๊ฐ๋ ์ฑ์ ๋์ด๋๊ฒ ๋จ์ ์ด๋ผ๋๊ฒ ๋ง์ด ๋๋ค๊ณ ์๊ฐํ๋? ๋์ดํ ์์ ๋ค์ ์ธ๊ธํ๊ฒ์ฒ๋ผ ์ฃผ๊ด์ ์ผ๋ก ๋์ ์ํ ์ ์๊ฒ ๋ค๋ง. ๋ ๋ง๋๋ก๋ผ๋ฉด ๊ฐ๋ ์ฑ์ด ๋์์ ์์ข์ ์ํฉ์ด ์๋ค๋๊ฑด๋ฐ ์ด๊ฒ ๋ง์ธ์ง ๋ฐฉ๊ตฌ์ธ์ง ์ ๋งใ ใ ใ ใ
ํน์ํ ๊ฒฝ์ฐ ์ด๋์ด ์ํด๋ ์ํ๋ณด๋ค ๊ทน๋จ์ง์ ์ด ์๋ค ์ด๊ฒ ๋์ฒด ๋ฌด์จ๋ฌธ์ฅ์ธ์ง ์ง์งใ ใ ใ ๊ตญ์ด์๊ฐ์ ๋ญํ๋์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ ๋ฌธ์ฅ๋ ฅ์ข ํค์ฐ๊ณ ์ด์๋ผ ์ ๋ฒ๊ธ์์๋ ๊ทธ๋ ๊ณ ๋๋๊ธ๋ณด๋ฉด ํ๋๊ฐ์ด ๋ญ๋ง์ธ์ง ํ์ฐธ๋ค์ฌ๋ค๋ณด๊ฒ๋๋ค
์ ์ด์ ์ฐ๋๊ฒฝ์ฐ ์๊ธฐํ ๋ ๋จ์ ์ด ์๊ณ ํญ์์ฐ๋๊ฒ ์๋๋ใ ใ ใ ใ ใ ์์ค
์ด ๋๊ธ์ ๊ฒ์๋ฌผ ์์ฑ์๊ฐ ์ญ์ ํ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ด์ํ ๋ ผ๋ฆฌ๋ก ์ด๊ฑฐ์ง ์ข ๋ถ๋ฆฌ์ง๋ง ๋งํ ํ๋ฑ์ธ์ด๋ค์ด ์ ๋งํ๋์ง ์ด์ ๋ ์ซ ์ ๋๋ก ์ฐพ์๋ณด๊ณ
์ด ๋๊ธ์ ๊ฒ์๋ฌผ ์์ฑ์๊ฐ ์ญ์ ํ์์ต๋๋ค.