*์ด ๊ธ์ <์ด๊ฒ์ด C#์ด๋ค> ์ฑ ์ ๋ฐํ์ผ๋ก ๊ณต๋ถํ ๊ธ์ ๋๋ค.
this ์์ฑ์๋?
์๊ธฐ ์์ ์ ์์ฑ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ์์ฑ์๋ค์ ์ฌ๋ฌ ๊ฐ ๋ง๋ค๋ค ๋ณด๋ฉด, ์์ฑ์๋ค ์ฌ์ด์์ ์ฝ๋๊ฐ ์ค๋ณต๋๋ ์ํฉ์ด ๋ฐ์ํ๊ณค ํ๋ค. ์ด๋ฐ ๋ถ๋ถ์ ํด๊ฒฐํ๊ณ ์ถ์ ๋ this( ) ์์ฑ์๊ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
class Monster
{
string name;
int hp;
int damage;
public Monster(string name)
{
Console.WriteLine("Monster(string name) ์์ฑ์ ํธ์ถ");
this.name = name;
}
public Monster(string name, int damage) : this(name)
{
// this(name)๋ Monster(string name) ์์ฑ์๋ฅผ ํธ์ถํจ
Console.WriteLine("Monster(string name, int damage) ์์ฑ์ ํธ์ถ");
this.damage = damage;
}
public Monster(string name, int hp, int damage) : this(name, damage)
{
// this(name, damage)๋ Monster(string name, int damage) ์์ฑ์๋ฅผ ํธ์ถํจ
Console.WriteLine("Monster(string name, int hp, int damage) ์์ฑ์ ํธ์ถ");
this.hp = hp;
}
}
Monster(string name, int hp, damage) ์์ฑ์๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด, this( )๋ก ์ด์ด์ง ์์ฑ์๋ค์ ํ๊ณ ์ฌ๋ผ๊ฐ๋ค.
์ ์ฝ๋์์ ์ ์ผ ๋์ ๋๋ฌํ ์์ฑ์๊ฐ Monster(string name)์ด๋ฏ๋ก ์ด ์์ฑ์๊ฐ ๋จผ์ ํธ์ถ๋ ํ, ๊ทธ ๋ค์์ Monster(string name, int damage) ์์ฑ์๊ฐ ํธ์ถ๋๊ณ , ์ด๋ฐ ์์ผ๋ก ์งํํ๊ฒ ๋๋ค.
์์ฑ์๋ฅผ ํธ์ถํ๋ ค๋ฉด new ํค์๋๋ฅผ ์ฌ์ฉํด์ผ ํ์ง๋ง, ์ด๋ ๊ฒ this( ) ์์ฑ์๋ฅผ ํตํด ํธ์ถํ ์๋ ์๋ ๊ฒ์ ์์๋ค.
๊ฒ๋ค๊ฐ, new ํค์๋์ ๋ฌ๋ฆฌ ํ์ฌ ์์ฑํ๋ ค๋ ๊ฐ์ฒด ์ธ์ ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง๋ ์๋๋ค.
ํ ๋ฒ ํ ์คํธ๋ฅผ ํด๋ณด์.
Monster testMonster = new Monster("Slime", 500, 10);
์ ๊ทผ ํ์ ์ (Access Modifier)๋?
ํด๋์ค ๋ด๋ถ ํ๋์ ์ ๊ทผํ ์ ์๋ ๋ณด์ ์์ค์ ๋งํ๋ค. ํ์ฌ ์ด ๊ธ์ ์์ฑํ๋ ์์ ๊ธฐ์ค์ผ๋ก, C#์๋ 6๊ฐ์ง์ ์ ๊ทผ ํ์ ์๊ฐ ์๋ค.
private
class Monster
{
int hp; // ์ ๊ทผ ํ์ ์๋ฅผ ๋ช
์ํ์ง ์์ ๊ฒฝ์ฐ, ํด๋์ค ๋ฉค๋ฒ๋ ๋ฌด์กฐ๊ฑด private
private int hp; // ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ int hp;์ ์ฌ์ค์ ๊ฐ๋ค.
}
๊ฐ์ฅ ๋์ ๋ณด์ ์์ค์ด๋ฉฐ, ์๊ธฐ ์์ ํด๋์ค์ ๋ด๋ถ์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ์ฆ, ํด๋์ค์ ์ธ๋ถ์์ ์ ๊ทผํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์์ ํด๋์ค์์ ์ ๊ทผ์ ํ ์ ์๋ค.
protected
class Monster
{
protected int hp;
}
์๊ธฐ ์์ ์ ํด๋์ค ๋ด๋ถ์์์ ์์ ํด๋์ค์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ํด๋์ค์ ์ธ๋ถ์์ ์ ๊ทผํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
๋ค๋ฅธ ์ด์ ๋ธ๋ฆฌ์ ์๋ ํด๋์ค๊ฐ ๋ด ํด๋์ค์ ์์ ํด๋์ค์ธ ๊ฒฝ์ฐ์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์์ ํด๋์ค์๊ฒ ์์ํด์ค ๋ฉค๋ฒ์๊ฒ ์ง์ ํ๋ค.
public
class Monster
{
public int hp;
}
ํด๋์ค์ ๋ด๋ถ์ ์ธ๋ถ ๋ชจ๋์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ๊ฐ์ฅ ๋ฎ์ ์์ค์ ๋ณด์ ๋ฑ๊ธ์ด๋ค.
internal
class Monster
{
internal int hp;
}
๊ฐ์ ์ด์ ๋ธ๋ฆฌ์ ์๋ ์ฝ๋์์๋ง public์ผ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ๋ค๋ฅธ ์ด์ ๋ธ๋ฆฌ์ ์๋ ์ฝ๋์์๋ private๊ณผ ๊ฐ์ ์์ค์ ์ ๊ทผ์ฑ์ ๊ฐ์ง๋ค.
protected internal
class Monster
{
iprotected nternal int hp;
}
๊ฐ์ ์ด์ ๋ธ๋ฆฌ์ ์๋ ์ฝ๋์์๋ง protected๋ก ์ ๊ทผํ ์ ์๋ค. ๋ค๋ฅธ ์ด์ ๋ธ๋ฆฌ์ ์๋ ์ฝ๋์์๋ private๊ณผ ๊ฐ์ ์์ค์ ์ ๊ทผ์ฑ์ ๊ฐ์ง๋ค.
private protected
class Monster
{
private protected int hp;
}
๊ฐ์ ์ด์ ๋ธ๋ฆฌ์ ์๋ ํด๋์ค์์ ์์ ๋ฐ์ ํด๋์ค ๋ด๋ถ์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.