๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ/C#

[C#] ์ƒ์†, ๋‹คํ˜•์„ฑ, ์˜ค๋ฒ„๋ผ์ด๋”ฉ

by HanaV 2023. 8. 17.
728x90

์ƒ์†: base ํ‚ค์›Œ๋“œ

๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋‚˜ ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

class Parent
{
    public void SomeMethod()
    {
        Console.WriteLine("Parent's method");
    }
}

class Child : Parent
{
    public void CallParentMethod()
    {
        base.SomeMethod(); // ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
    }
}

์œ„ ์˜ˆ์‹œ๋Š” base๊ฐ€ ์—†์–ด๋„ ์ž˜ ์ž‘๋™ํ•œ๋‹ค. (๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์—) ํ•˜์ง€๋งŒ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด base๋ฅผ ๋ถ™์—ฌ์ฃผ๊ธฐ๋„ ํ•œ๋‹ค. 

๋งŒ์•ฝ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ•œ๋‹ค๋ฉด ๊ผญ base ํ‚ค์›Œ๋“œ๋กœ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ์™€ ํŒŒ์ƒ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌ๋ถ„ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

class Parent
{
    public virtual void SomeMethod()
    {
        Console.WriteLine("Parent's method");
    }
}

class Child : Parent
{
    public override void SomeMethod()
    {
        base.SomeMethod(); // ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
        Console.WriteLine("Child's method");
    }
}

(๋งŒ์•ฝ ์˜๋„ํ•˜์ง€ ์•Š์€ ์ƒ์† ๋“ฑ์„ ๋ง‰๊ณ  ์‹ถ๋‹ค๋ฉด, ํด๋ž˜์Šค ์•ž์— sealed๋ฅผ ๋ถ™์ด๋ฉด ์ƒ์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.)

 

 is / as

if (A is B) : B๊ฐ€ A์— ์†ํ•œ ์ธ์Šคํ„ด์Šค์ธ์ง€ ํ™•์ธํ•ด์„œ true/false๋ฅผ ๋ฐ˜ํ™˜ํ•จ

class Animal { }
class Dog : Animal { }

class Program
{
    static void Main()
    {
        Animal myAnimal = new Dog();

        if (myAnimal is Dog)
        {
            Console.WriteLine("myAnimal is a Dog");
        }
        else
        {
            Console.WriteLine("myAnimal is not a Dog");
        }
    }
}

Dog myDog = myAnimal as Dog: myAnimal์ด ์‹ค์ œ๋กœ Dog ํด๋ž˜์Šค๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ณ , ๊ทธ๋ ‡๋‹ค๋ฉด ๊ทธ ๊ฐ์ฒด๋ฅผ myDog ๋ณ€์ˆ˜์— ํ• ๋‹นํ•จ

//์˜ˆ์ œ 1
Animal myAnimal = new Animal();
Dog myDog = myAnimal as Dog; // myDog์—๋Š” null์ด ํ• ๋‹น๋จ

//์˜ˆ์ œ2
Animal myAnimal = new Dog(); //(๋‹คํ˜•์„ฑ์˜ ๊ฐœ๋…์„ ํ™œ์šฉํ•œ ์ฝ”๋“œ)
Dog myDog = myAnimal as Dog; // myDog์—๋Š” Dog ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋จ

 

์˜ค๋ฒ„๋ผ์ด๋”ฉ(Override)

ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ด๋ฆ„๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…๊ณผ ๊ฐœ์ˆ˜๋Š” ๊ฐ™์ง€๋งŒ ๋‹ค๋ฅธ ๋™์ž‘์„ ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹คํ˜•์„ฑ์„ ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒ์œ„ ํด๋ž˜์Šค์— virtual์„ ๊ผญ ๋ถ™์—ฌ์ค˜์•ผ ํ•œ๋‹ค.

class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("Animal makes a sound");
    }
}

class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Dog barks");
    }
}

class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Cat meows");
    }
}

class Program
{
    static void Main()
    {
        Animal animal1 = new Dog();
        Animal animal2 = new Cat();

        animal1.MakeSound(); // "Dog barks" ์ถœ๋ ฅ
        animal2.MakeSound(); // "Cat meows" ์ถœ๋ ฅ
    }
}

 

728x90

"); wcs_do();