관리 메뉴

Algo μ“°μž

09. μƒμ†κ΄€κ³„μ˜ 클래슀 ν˜•λ³€ν™˜ λ³Έλ¬Έ

πŸ’» Programming Language/C#

09. μƒμ†κ΄€κ³„μ˜ 클래슀 ν˜•λ³€ν™˜

S.Honey 2022. 4. 6. 09:22
namespace ClassConversionEx
{
    // μƒμ†κ΄€κ³„μ˜ 클래슀 μ‚¬μ΄μ—μ„œμ˜ ν˜•λ³€ν™˜
    class Human
    {
        public void showInfo()
        {
            Console.WriteLine("Human");
        }
    }

    class Programmer : Human
    {
        public void programming()
        {
            Console.WriteLine("ν”„λ‘œκ·Έλž˜λ° ν•˜λŠ” 개발자");
        }
    }

    class Designer : Human
    {
        public void design()
        {
            Console.WriteLine("λ””μžμΈν•˜λŠ” λ””μžμ΄λ„ˆ");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Human human = new Human();  
            human.showInfo();

            human = new Programmer();
            // ProgrammerλŠ” Human 클래슀λ₯Ό μƒμ†λ°›μ•˜κΈ° λ•Œλ¬Έμ— Humanνƒ€μž…μ΄ 될 수 μžˆλ‹€.
            human.showInfo();
            // human.programming(); 은 μ‚¬μš©ν•  수 μ—†μŒ. 
            // => human κ°μ²΄λŠ” μžμ‹ν΄λž˜μŠ€μ˜ λ©”μ†Œλ“œλŠ” μ‚¬μš©ν•  수 μ—†κΈ° λ•Œλ¬Έμ— 호좜이 λΆˆκ°€λŠ₯함.


            Programmer programmer = (Programmer)human;
            // Human은 μžμ‹μ˜ ν˜•νƒœλ‘œ λ³€ν™˜μ΄ κ°€λŠ₯ν•œλ°, 이와같이 λ³€ν™˜ν•΄μ£Όλ©΄ μžμ‹μ˜ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  수 있음.
            programmer.showInfo();
            programmer.programming();

        }
    }
}
Output

Human
Human
Human
ν”„λ‘œκ·Έλž˜λ° ν•˜λŠ” 개발자

  • μ½”λ“œμ™€ 주석을 톡해 ν˜•λ³€ν™˜μ˜ λͺ¨μŠ΅μ„ 확인할 수 있으며 결과적으둜 νŒŒμƒν΄λž˜μŠ€μ˜ μΈμŠ€ν„΄μŠ€λŠ” λΆ€λͺ¨ν΄λž˜μŠ€μ˜ μΈμŠ€ν„΄μŠ€λ‘œ ν™œμš©λ  수 μžˆλ‹€.

  • μ™œ ν˜•λ³€ν™˜μ„ μ‚¬μš©ν•˜λŠ”κ°€?
    • 만일 teacher 라고 ν•˜λŠ” μƒμœ„ν΄λž˜μŠ€κ°€ 있고, teacher의 λ©”μ†Œλ“œμ€‘ teach λΌκ³ ν•˜λŠ” λ©”μ†Œλ“œμ˜ λ‹€μ–‘ν•œ νƒ€μž…μ˜ λ§€κ°œλ³€μˆ˜μ— λ”°λ₯Έ μ˜€λ²„λ‘œλ”©μ„ ν•΄μ€˜μ•Όν•œλ‹€λ©΄ 상속받은 ν΄λž˜μŠ€λ“€μ˜ νƒ€μž…μ„ λΆ€λͺ¨ν΄λž˜μŠ€λ‘œ ν†΅μΌν•˜μ—¬ νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 있고, 이λ₯Ό 톡해 λ§Žμ€ μ–‘μ˜ μ˜€λ²„λ‘œλ”© μ½”λ“œλ₯Ό λ§‰μŒ
class Teacher
    {
        public void teaching(Programmer pm){}

        public void teaching(Designer ds) {}

        public void teaching(Business man) {}

        public void teaching(Engineer eg) {}

        ....
    }
class Teacher
    {
        public void teaching(Human hm){}
    }