๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90

*์ด ๊ธ€์€ <์ด๊ฒƒ์ด 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;
}

 

๊ฐ™์€ ์–ด์…ˆ๋ธ”๋ฆฌ์— ์žˆ๋Š” ํด๋ž˜์Šค์—์„œ ์ƒ์† ๋ฐ›์€ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

728x90
๋ฐ˜์‘ํ˜•