[C#] ํด๋์ค
C#์ ๊ฑฐ์ ์์ํ ๊ฐ์ฒด์งํฅ์ ์ธ ์ธ์ด์ด๊ณ , ๋๋ฌธ์ ๋ชจ๋ ์ผ์ ํด๋์ค ๋จ์์์ ์ด๋ฃจ์ด์ง๋ค.
C์ธ์ด์ฒ๋ผ ์ ์ญ์ ๋ณ์๋๊ณ ํจ์๋๊ณ ๊ทธ๋ฐ๊ฑด ์๋๋ค. ์ ์ญ์ ์ฌ์ ์๋๊ฑด ์ค์ง ํด๋์ค๋ฅผ ๋น๋กฏํ ํ์ ์ ์ ์ธ ๋ฟ์ด๋ค.
C#์ ๋๋ถ๋ถ์ ์ธ์ด๊ฐ ๊ทธ๋ ๋ฏ์ด ์ด๋ฐ ์์ผ๋กย ํด๋์ค๋ฅผ ์ ์ํ๋ค.
class ํด๋์ค๋ช
: ์์ํ ํ์
{
์ ๊ทผ์ ์ด์ ํ์
๋ณ์;
์ ๊ทผ์ ์ด์ ํ์
ํ๋กํผํฐ { ํ๋กํผํฐ ๋ชธ์ฒด };
์ ๊ทผ์ ์ด์ ํ์
๋ฉ์๋(ํ๋ผ๋ฏธํฐ) { ๋ฉ์๋ ๋ชธ์ฒด }
์ ๊ทผ์ ์ด์ ํด๋์ค๋ช
(ํ๋ผ๋ฏธํฐ) { ์์ฑ์ ๋ชธ์ฒด }
์ ๊ทผ์ ์ด์ ~ํด๋์ค๋ช
() { ์๋ฉธ์ ๋ชธ์ฒด }
......๋ฑ๋ฑ
}
๋ณ์๋ ๋ฉ์๋๋ ๊ตณ์ด ์ค๋ช ํ์ง ์๊ฒ ๋ค.
ํ๋กํผํฐ
C#์๋ ํ๋กํผํฐ๋ผ๋ ๊ฒ ์๋๋ฐ, ๊ฒํฐ/์ธํฐ ๋ฉ์๋๋ฅผ ์ถ์ํํ ๊ฒ์ด๋ค.
์ด๋ฐ์์ผ๋ก ์ด๋ค,
์ฌ๊ธฐ์ ์ฌ์ฉ๋ get๊ณผ set, value๋ ์ํฉ๋ณ ํค์๋์ด๋ค. ๋ค๋ฅธ๋ฐ์๋ ์๋ณ์๋ก ์ธ ์ ์๋จ๊ฑฐ๋ค.
get ๋ธ๋ญ์ ๋ฐํ๊ฐ์ด๊ณ set ๋ธ๋ญ์ ์ง์ด๋ฃ์ ๊ฐ์ ๋ช
์ํ๋ค. value๋ ๋์
๊ฐ์ผ๋ก ๋ค์ด์ค๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ์ํํ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์์ฒ๋ผ name ๋ณ์์ ๋ํ ํ๋กํผํฐ๋ฅผ ๋ง๋ค์ด์ ๋ณ์์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.
์ด๊ฒ ์ ํ์ํ๊ฑธ๊น? ์ด์ฐจํผ ์ ๋ ๊ฒ ๊ณต๊ฐํด์ ์ธ๊ฑฐ๋ฉด ๊ทธ๋ฅ public ๋ณ์๋ฅผ ์ฐ๋๊ฒ ๋ซ์ง ์๋?
๊ทผ๋ฐ ์ฌ๋๋ค์ ์ด๊ฒ ์คํ๋ ค ๋ญ ์ถ์ํ๊ฐ ์๋๋ค๋ ๋ญ๋ผ ํ๋๋ฐ ๋๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค.
๊ทธ๋๋ get๊ณผ set ์ฌ๋ถ๋ฅผ ์กฐ์ ํ ์๋ ์๋ค. set์ ์์ ๋นผ๋ฒ๋ฆฌ๋ฉด ์ฝ๊ธฐ์ ์ฉ์ด ๋๋๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฒ์ 3.0๋ถํฐ๋ ๋ ํธ๋ฆฌํ ํ๋กํผํฐ ์๋๊ตฌํ ๊ธฐ๋ฅ์ด ์๊ฒผ๋ค.
get๊ณผ set์ ๊ตฌํ์ ์ง์๋ฒ๋ฆฌ๊ณ ๋ณ์๋ฅผ ์์ ๋ฒ๋ฆฌ๋ฉด, ํ๋กํผํฐ๊ฐ ์์์ ๋ณ์๋ฅผ ๋ง๋ค์ด ์จ๊ฒจ๋๊ณ ๊ฐ๋ค์ด๋ค.
ํจ์ฌ ํธ๋ฆฌํด์ก๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ๊ธฐ๋ฅ์ ๊ธฐ๋ฐํจ์ get์ด๋ set์ ์ ๊ทผ์ ํ์ ๊ฑธ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์ด๋ฌ๋ฉด ๊ฐ์ ํ ๋น์ ํด๋์ค ๋ด๋ถ์์๋ง ์ง์ ํ ์ ์๋ค.
๊ฒ๋ค๊ฐ ๋ฒ์ 6.0๋ถํฐ๋ ์ฌ๊ธฐ๋ค ๋ํดํธ๊ฐ์ ๋ฃ์ ์๋ ์๋ค.
ํ . ํ๋ฅญํ๋ค. ํ๋กํผํฐ๋ ์ด๊ฑธ๋ก ๋์ด๋ค.
์์ฑ์ ์ฌ์ฉ๋ฒ์ ์๋ฐ๋ ๋๊ฐ๋ค.
์์์ ๊ต์ฅํ ๊น๋ํ๋ค.
์๋ฐ์ฒ๋ผ extends, impl... ๋๋ฝ๊ฒ ํ์ดํ์ณ์ผ ํ๋๊ฒ๋ ์๋๊ณ , ์ ๊ทผ์ ์ด๋ฅผ ๋ถ์ด๋ ๊ฒ๋ ์๋๋ค.
์ด๋ ๊ฒ.
๊ทธ๋ฆฌ๊ณ ์ base๋ ์ํผํด๋์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ค. ์๋ฐ์ super์ ๋์ผํ๋ค ํ ์ ์๋ค. ์ ๋ ๊ฒ ์ฐ๋ฉด ์ํผํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํ๋๊ฑฐ๋ค.
์์ ์ ๊ฐ๋ฆฌํค๋ ํค์๋๋ก๋ this๊ฐ ์๋ค.
this๋ก๋ ์ ๋ฐ์์ผ๋ก ์์ฑ์๋ฅผ ์ธ๊ถ๋จน์ ์ ์๋ค. ์์ฑ์ ์์์ด๋ผ๊ณ ํ๋ค.
์์ฑ์() : this() {...}
์๋ฉธ์๋ ๊ฐ์ฒด๊ฐ ์๋ฉธํ ๋ ๋์ค๋๊ฑด๋ฐ ๋ฑํ ์ง์ ์ธ๋ฐ๋ ์๋ค. ๊ทธ๋ฌ๋๊น ๊ทธ๋ฅ ๋๊ธด๋ค.
์์ฐธ ์ ๊ทผ์ ์ด์๋ ๋ฌด๋ ค ์ด๋ ๊ฒ 6๊ฐ๋ ์๋ค.
private
public
protected
internal
internal protected
private protected (since C# 7,2)
๊ทผ๋ฐ ์์ ๋๊ฐ์ง ๋ง๊ณ ๋ ์ธ์ผ ์์ผ๋ ์์ด๋ฒ๋ ค๋ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์ค๊ดํธ๋กย ๋ณ์๋ ํ๋กํผํฐ๋ช ์ ์ง์ ํด์ ์ง์ ์ง์ด๋ฃ์ ์๋ ์๋๋ฐ, public ๋ฉค๋ฒ์๋ง ํด๋น๋๋ค. ์์ฑ์ ํ๋ผ๋ฏธํฐ์ ๋์์ ์ฌ์ฉ๋ ์ ์๋ค. ์ด๊ฑด ๋ฒ์ 3.0๋ถํฐ ๋์จ ๊ธฐ๋ฅ์ด๋ค.
Static
static์ ๋ํ ๊ฐ๋
์ C++์ด๋ ์๋ฐ์ ๋์ผํ๋ค.
๊ทธ๋ฐ๋ฐ static๋ฉค๋ฒ๋ง์ ๊ฐ์ง ์ ์๋ static class๊ฐ ์กด์ฌํ๋ค.
๋ฐ๋ก ์์ ์ด๋ฏธ์ง์ฒ๋ผ class ์ ์ธ ์์ static๋ง ๋ถ์ด๋ฉด ๋๋ค. ์ด ์ ์ ํด๋์ค์ ๋น์ ์ ๋ฉค๋ฒ๊ฐ ์ ์ธ๋๋ฉด ๋นจ๊ฐ์ค์ด ์ณ์ง๋ค.
๊ฐ์ธ์ ์ผ๋ก Main ๋ฉ์๋์ ํด๋์ค๋ ์ ์ ํด๋์ค๋ก ์ง์ ํ๋๊ฒ ์ข๋ค ์๊ฐํ๋ค.
๊ทธ๋ฆฌ๊ณ static๋ฉค๋ฒ๋ง์ ๋ฐ๋ก ๋ฌถ์ด์ ์ด๊ธฐํํ๋ ์ ์ ์์ฑ์๋๊ฒ ์๋ค.
static ํด๋์ค๋ช
()
{
์ด๊ธฐํ์์
์ํ
}
์ด๋ ๊ฒ ์ฐ๋ฉด ๋๋ค. ํ๋ผ๋ฏธํฐ๋ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ ์ ๋ฉค๋ฒ์ ์ด๊ธฐํ๋ง์ ๋ด๋นํ๋ค.
๊ทผ๋ฐ ๊ตณ์ด ์ด๊ฑฐ ์ธ ํ์ ์๋? ๊ทธ๋ฅ ์ ์ธ๋ถ์๋ค ์ด๊ธฐํ๋ฅผ ํ์ง
์ค๋ฒ๋ผ์ด๋ฉ
C++์์๋ ์จ์ ํ ๋คํ์ฑ์ ๊ตฌํํ๊ธฐ ์ํด์๋ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๊ทธ๊ฑธ ์ค๋ฒ๋ผ์ด๋ํด์ผํ๋ค. ๊ทผ๋ฐ ์ด๊ฒ ํ์์ฌํญ์ ์๋๋ค.
์๋ฐ์์๋ ์ ์์
์ ๊ทธ๋ฅ ๋ํดํธ๋ก ํด์ค๋ค.
C#์์๋ ์ด ๋์ ์ ์ถฉํ๋ค. ์ค๋ฒ๋ผ์ด๋ฉ์ ํ๋ ค๋ฉด ๋ฐ๋ฅ ํด๋์ค์ ์๋ ๋ฉ์๋๋ฅผ ๋ฌด์กฐ๊ฑด virtual๋ก ์ ์ธํ๊ณ , ์ดํ์ ์ฌ๋ผํ๋ ๋ฉ์๋๋ค์ ์ ๋ถ override๋ก ์์ํด์ผ ํ๋ค.
์ด๋ ๊ฒ
ํน์ ํด๋์ค์ ๋ํ ์์์ ๊ธ์งํด๋๊ณ ์ถ๊ฑฐ๋
ํน์ ๋ฉ์๋๋ค์ ๋ํ ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ง๊ณ ์ถ์ผ๋ฉด sealed ํค์๋๋ฅผ ์ฐ๋ฉด ๋๋ค.
ํด๋์ค ๋ด์ธ
๋ฉ์๋ ๋ด์ธ
๋ถํ ํด๋์ค๋๊ฒ๋ ์๋ค. ํด๋์ค ์ ์ธ ์์๋ค๊ฐ partial์ ๋ถ์ด๋ฉด ํ๋์ ํด๋์ค ์ ์๋ฅผ ๋ ์ด์์ผ๋ก ์ชผ๊ฐค ์ ์๋ค.
ํน๋ณํ๊ฑด ์๋ค. ๊ทธ๋ฅ ์ปดํ์ผ๋ฌ๊ฐ ์์์ ๋ถ์ฌ๋ค๊ฐ ๋๋ฆฌ๋๊ฑฐ๋ค. ๋ณ ์ธ๋ฐ๋ ์๋ ๊ฒ ๊ฐ๋ค.
๊ตฌ์กฐ์ฒด
ํด๋์ค ์ ์ธ์์ class๋ง struct๋ก ๋ฐ๊พธ๋ฉด ๊ตฌ์กฐ์ฒด๊ฐ ๋๋ค.
๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ์ ํด๋์ค๋ ๊ฐ์๋ฐ
๋ช๊ฐ์ง ์ ์ฝ์ฌํญ๊ณผ ์ฐจ์ด์ ์ด ์๋ค.
์ผ๋จ ํด๋์ค๋ ์ฐธ์กฐํ์
์ธ๋ฐ๋ค๊ฐ ๊ฐ๋น์ง์ปฌ๋ ํฐ๊ฐ ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค.
๊ทผ๋ฐ ๊ตฌ์กฐ์ฒด๋ ๊ฐ ํ์
์ด๋ผ ๊ทธ๋ฅ ๋ก์ปฌ์ ๋ฒ์ด๋๋ฉด ๋ ๋ผ๊ฐ๋ค.
ํด๋์ค๋ ํ์ ํ ๋น๋ ๋ ํผ๋ฐ์ค๋ฅผ ํตํด ์๋ํ๊ธฐ ๋๋ฌธ์ ์ฃผ์๋ง์ ๋ณต์ฌํ๋ ์์๋ณต์ฌ๊ฐ ๊ธฐ๋ณธ๋์์ด๋ค.
๊ตฌ์กฐ์ฒด๋ ๊น์๋ณต์ฌ๋ค.
ํด๋์ค๋ ์์ฑํ ๋ ๋ฐ๋์ new๋ฅผ ์ฐ๋๋ฐ,
๊ตฌ์กฐ์ฒด๋ ์จ๋๋๊ณ ์์จ๋๋๋ค. ์๋์ ์ฐจ์ด๋ ์๋ค. new ๋ถ์ธ๋ค๊ณ ๋์ ์ผ๋ก ํ ๋นํ๊ฑฐ๋ ๊ทธ๋ฌ์ง ์๋๋ค.
๊ตฌ์กฐ์ฒด๋ ๋งค๊ฐ๋ณ์ ์๋ ์์ฑ์๋ฅผ ์ ์ธํ ์ ์๋ค.
๊ตฌ์กฐ์ฒด์ ์์ฑ์๋ ๋ชจ๋ ํ๋๋ฅผ ์ด๊ธฐํํด์ผํ๋ ์๋ฌด๊ฐ ์๋ค.
์ด๊ฑฐ์ฒด
์ด๊ฑฐ์ฒด๋ ๋ญ ๊ทธ๋ ๋ค. ๋ปํ์ง
์ด๊ฑฐ๋ ์์์ ๋ฐ์ ์ ์๋ค. ์ ์ํ์
๋ง. ๊ทธ๋ฆฌ๊ณ ๊ทธ ํ์
์ผ๋ก ์ด๊ฑฐ๋ฅผ ์ฒ๋ฆฌํ๋ค.
๋ํดํธ๋ int๋ค.
์ธํฐํ์ด์ค
์ธํฐํ์ด์ค๋ ์๋ฐ๋ ๋ณ์ฐจ์ด ์๋ค.
๋ณ์๊ฐ ์๊ณ ๋ฉ์๋์ ์ ์๊ฐ ์๋, ๊ป๋ฐ๊ธฐ๋ง์ ๊ฐ์ง๋ ํ์
์ด๋ค. ๋๋ฌธ์ ์ด๊ฑฐ๋ง์ผ๋ก๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค. ๋ญ๊ฐ ์์ด์ผ ์์ฑ์ ํ์ง
์ ๊ท์ฐฎ๋ค. ์ด์ฐจํผ ์ฌ๊ธฐ๊น์ง ๋ดค์ผ๋ฉด ๋ค ์ํ
๋ ์์ ๋ง ์ฐ๊ฒ ๋ค.
-๋ฉ์๋ ๊ตฌํ์ด ์๋ ํด๋์ค
-๊ฐ์ฒด ์์ฑ ๋ถ๊ฐ
-๋ณ์ ์์ ๋ถ๊ฐ
-์ ๊ทผ์ ์ด ๋ถ๊ฐ
C#๋ ์๋ฐ์ฒ๋ผ ๋ค์ค์์์ ๊ธ์งํ์ง๋ง,
์ธํฐํ์ด์ค์ ํํด์๋ง ๋ค์ค์์์ด ๋๋ค. ๋ญ ๋ค์ด์๋๊ฒ ์์ผ๋ ์ถฉ๋ํ ๊ฒ๋ ์์ง.
์ถ์ํด๋์ค
์ถ์ํด๋์ค๋ ์ธํฐํ์ด์ค์ ํด๋์ค๋ฅผ ์์ด๋์๊ฑฐ๋ค. ๊ตฌํ์ ๊ฐ๋ฅํ๋ฐ ๋ฉ์๋ ์ ์ธ๋ง ๋จ๊ฒจ๋๊ณ ์ ๊ฑธ ์์๋ฐ์ ํด๋์คํํ
์ ์ฒด์ ์ธ ๊ตฌํ์ ์ ์ํ ์ ์๋ค.
๋์์ธํจํด์ ์ ์ฉํ๊ฒ ์ฐ์ธ๋ค.
์ฌํผ ๋๋ต์ ์ธ ํน์ฑ์ ์ด๋ ๋ค.
-๋ฉ์๋ ๊ตฌํ์ ํ ์ ์๋ค. ์ํ ์๋ ์๋ค. ๋ง๋๋ก๋ค
-๊ฐ์ฒด ์์ฑ ๋ถ๊ฐ(๋์ผ)
-๋ณ์ ์์ ๊ฐ๋ฅ
-์ ๊ทผ์ ์ด ๊ฐ๋ฅ
abstract class ํด๋์ค๋ช
{
public abstract void ์ถ์๋ฉ์๋๋ช
();
...
}
์ด๋ฐ์์ผ๋ก ์ฌ์ฉํ๋ค.
์ด์ ๋๋ฉด ์ผ์ถ ๋ค ์ ์๋ฏํ๋ค.
ํด๋์ค๋ ์ฌ๊ธฐ์ ๋ง์น๋ค.