ย ๊ฐ๋จํ ์์๋ฅผ ๋ค์ด๋ณด๊ฒ ์
ย Car Class๊ฐ ์์
ย Car Class ๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ ์ผ๋ฐ์ ์ผ๋ก
ย Car car = new Car(); ๋ฅผ ํด์ผ ํจ
ย
ย ๊ทธ๋ฐ๋ฐ ์ ์ฒด ํ๋ก์ ํธ์์ ์ด๋ฐ Car ์์ฑ์ ํ๋ ๊ฒ์ ๋ง์๋๊ณ ์ถ๊ณ ย
ย ์ด๋ค ํ ๋งค๋์ ๋ Car ์ ์์ฑ์ ๊ด๋ฆฌํ๋ ๋ฌด์์ธ๊ฐ ( CarManager ๋ผ๊ณ ์นญํ๊ฒ ์ )์์ ํ๊ณ ์ถ์
ย ์ฌ์ฉ ๋ฐฉ์์ย
ย ์ด๋ค ์คํฌ๋ฆฝํธ A๊ฐ ์์ ๋
ย pubilc class Aย
{
ย ย ย ย ย function()ย
{
Car car1 = new Car();ย ย ย ย ย ย ย ย --- ๋ถ๊ฐ๋ฅ
Car car2 = CarManager.GetCar();ย ---ย ๊ฐ๋ฅ
}
}
์ด๋ฐ ์์ผ๋ก ๊ฐ์ ธ์ค๊ณ ์ถ์๋ฐ
๋ฌธ์ ๋ Car ์ ์ฅ์์ script A , CarManager ๋ ๋ค ์ธ๋ถ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์
ํน๋ณํ ์ ํ์๋ฅผ ์ฐ์ง ์์ผ๋ฉด ํ ์ชฝ์์๋ง ์ ๊ทผํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐ ๋จ
C++์์ friend ํค์๋๋ฅผ ์ด์ฉํด์ ํ๋ ๊ฒ์ฒ๋ผ CarManager์ ํน๋ณํ ํค์๋๋ฅผ ๋ฌ์์ ํ๊ธฐ๋ ์ข ์ ๋งคํ๊ณ
์ด๋ค ์์ผ๋ก ํ๋ ๊ฒ ์ข์๊น?ย
์ ๋ต์ ์ ์๋ ค์ค๋ ๋๋๊น... ํค์๋๋ผ๋ ์ข ๋ถํํจ
ย
์ ๋ํฐ์์ ์์ ์ค์ด๋ c#์ด๋ผ๊ณ ์๊ฐํด์ฃผ๋ฉด ์ข๊ฒ ์
Car ํด๋์ค๋ฅผ CarManager ํด๋์ค์ ๋ด๋ถํด๋์ค๋ก ์ ์ธํ๋ฉด ๋๋ ค๋?
Car ํด๋์ค์ ์์ฑ์๋ private๋ก ํ๊ณ
์ฌ์ค ๊ทธ๊ฑฐ ํ๊ธฐ ์ซ์ด์ ๊ทธ๋ฌ์ Car Class ๋จ์ผ ์คํฌ๋ฆฝํธ๋ก ํด๋๊ณ ์ถ์ด์...
๋ต๊ธ ๋ก์ค... ๋ด ๊ธฐ์ต์ ์ฌ๋ฌ ๋ช ์ด์ ํ๋ก์ ํธ ํ ๋, ๊ฐ์ฒด ์์ฑ ํจ๋ถ๋ก ํ๋ ๊ฒ์ ๋ง๊ธฐ ์ํด์ ๋ญ ์ ๊ทผ์๋ ๊ทธ๋ฐ ๊ฒ ๋ถ์ด๋ ๊ฑธ๋ก ์๋๋ฐ ํ์์ ์์ฐ๋ ๋ฐฉ์์ด๋ผ ์ง๊ธ ์ข ํท๊ฐ๋ฆฌ๋ค.. ํผ์์ ํ๊ณ ์์ด์ ์์์ ์ผ๋ก ๊ทธ๋ฅ ์์ฐ๋ฉด ๋๊ธด ํ๋๋ฐ
https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/concepts/caller-information
์ด๋ฐ๊ฑธ๋ก
๋๋ ค๋
๋ต๊ธ ๋ก์ค. ์๋ ๊ฒ ๊ฐ์. ์ค๋ น ๊ฐ๋ฅํ๋ค๊ณ ํด๋ ์ฝ๊ฐ ๋ฐฐ๋ณด๋ค ๋ฐฐ๊ผฝ์ด ์ปค์ง๋ ๊ธฐ๋ถ์ด๊ณ ์ฌ์ฉ ์์๊ฐ ๋ด๊ฐ ์๊ฐํ๋ ๊ฒ ์๋ ๊ฒ ๊ฐ์
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
๊ทธ๋ฅ ํ์์ฒ๋ผ ๋ด๊ฐ ์ ์์์ ์จ์ผํ ๋ฏ.. ์ฌ์ค ๊ธํ ๊ฑด ์๋๋ฐ ๊ทธ๋ฐ ๊ฒ ์์งข์ ๊ฐ์ฒด ์์ฑ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ค ๋ ๋ช ํํ abstract ๋ถ์ฌ์ฃผ๋ ๊ฒ ๋ง๋ฅ ๋ญ๊ฐ ๋ช ํํ ํ๊ณ ์ถ์๋๋ฐ ์คํ๋ ค ๋ ๊ท์ฐฎ๊ฒ ๋๋ ๊ฒ ๊ฐ์. ํผ์ํ๋ ํ๋ก์ ํธ๋ผ ๊ฑ ํธํ ํด์ผํ ๋ฏ
๋ต๋ณ ๊ฐ์ฌ. ๊ทผ๋ฐ ๋ฐฐ๋ณด๋ค ๋ฐฐ๊ผฝ์ด ์ปค์ง๋ ์ํฉ์ด๋ผ ๊ทธ๋ฅ ์ํ๊ธฐ๋ก ํจ ์ฌ์ค ๊ธํ ๊ฑด ์๋์๋๋ฐ ๋ง์ฝ์ ์ง์ง ํ์ํ์ผ๋ฉด ๊ทธ๋ฅ ๋ด๋ถํด๋์ค๋ก ๋ง๋ค์ด์ ํฉํ ๋ฆฌํจํด์ผ๋ก ๋ง๋๋๊ฒ ๋์ ๊ฒ ๊ฐ์;
๊ทธ๊ฑธ ํฉํ ๋ฆฌ ๋ฉ์๋ ๋ผ๊ณ ํ๋ค
๋ฌธ์ ๋ ๋ด๊ฐ Car ๋ฅผ ์ธ๋ถ ์คํฌ๋ฆฝํธ๋ก ๋๋๊ณ ์ถ์ด์ ์๊ธฐ๋ ์ํฉ์... CarManager ์์ Car ๋ด๋ถ ํด๋์ค๋ก ๋ง๋ค์ด์ ํ๋๊ฒ ์๋๋ผ..
Car๊ฐ public class ์ธ ํ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ง์ ์ ์์. ๋์ฑ Carmanager ์์ ๋ดํฌ์ํค์ง๋ ์๊ฒ ๋ค๋ฉด ๋๋์ฑ ๋ต์ด ์์. new Car(carmanager m) ์ด๋ผ๋ ์๋ ๊ฐ๋ฅ์ ํ์ง๋ง ๊ทธ๋ ๋ค ํ๋๋ผ๋ new Car() ๋ฅผ ๋ง์ ์๋ ์์ง. ๋ง์ฝ ์ฝ๋ฉ ๋ฏธ์ค๋ฅผ ์ค์ด๊ณ ์ถ์ ๊ฒ์ด๋ผ๋ฉด ๋ฆฌ์คํผ์ ๋ณด๋ฉด ์ฝ๋์ ํจํด์ ์ด์ฉํด์ ๊ฒฝ๊ณ /์๋ฌ ๋์์ฃผ๋ ๊ธฐ๋ฅ์ ์์ด. ๋ ๊ทธ๊ฑธ๋ก ๋ด๊ฐ ์์ฃผ ํ๋ ์ค์๋ค์ ํจํด์ ๋ฑ๋กํด๋ฌ์ ์ฝ๋์ ๋นจ๊ฐ์ค ๋จ๊ฒ ํด๋๊ณ ์ฐ๋ ์ค์.
๋ต๋ณ ๊ฐ์ฌ.
์ ์๊ฐ๋ฌ๋ค. new Car() ์์ฑ์์๋ ๋ณธ๋ฌธ์์ ์ต์ ์ ์ ๋๋ ค๋ฒ๋ฆฌ๊ณ , new Car(Carmanager m) ์ ์ ์์๋ํ๊ฒ ํ๋ฉด ๋๊ฒ ๋ค. ๊ทธ๋ฌ Carmanager๊ฐ ์์ผ๋ฉด Car๋ ์์ง. ์ด๋ ๊ฒ ๋ง๋ ํ Carmanager.MakeCar(string carName) ์ผ๋ก๋ง ์ฐ๋ฉด ๋๊ฒ ๋ค?
๋ต๋ณ ๊ฐ์ฌ... ๊ธํ ๊ฑฐ ์๋๋ผ abstract ์ฒ๋ผ ๊ฐ๋จํ ํค์๋๋ ๊ทธ๋ฐ๊ฒ ์๋๋ฉด ์ฐ๊ธฐ๊ฐ ์ข ์ ๋งคํ ๋ฏ.. ๊ตณ์ด ๊ทธ๋ ๊ฒ ๊น์ง ํ ํ์๋ ์์ด์; ๋ง์ด ์ฐพ์์ค์ ๋กํ.. ์ฐจ๋ผ๋ฆฌ ๋งํ๋๋ก ๊ทธ๋ฌ๋ฉด ํฉํ ๋ฆฌ ํจํด ์จ์ ํ๋๊ฒ ๋ซ๊ฒ ์..