C#

[class] C# - Polymorphism (다형성)

2,211
목차
  1. Polymorphism (다형성) 정의
  2. 다형성 예제1 - 부모 클래스의 메서드로 작업 수행
  3. 다형성 예제2 - 사용자 입력값 따라 다른 작업 수행

 

Polymorphism (다형성) 정의

 

1. 

다형성 (Polymorphism) : "다양한 형태" 의미.

즉,

상속 통해 서로 관련된 많은 클래스 있을 때,

부모 (메서드・속성)으로 다른 작업을 수행.

※ 부모 클래스 변수에 자식 클래스의 인스턴스 할당.

※ 부모 클래스 배열변수에 자식클래스 인스턴스 담아 사용할 때 유용.

 

2.

장점 : 기존 코드 재사용 통해, 작업 세분화 가능. 

 

3.

Java와 달리, 아래 키워드 추가해야 정상 출력.

※ 부모 클래스 메서드에 virtual 키워드 추가.

※ 자식 클래스 메서드에 override 키워드 추가.. 

 

4.

상속과 다형성 사용 이유 : 코드 재사용에 유용.

(∵ 새 클래스 생성 시, 기존 클래스의 필드와 메서드 재사용 가능.)

 

 

다형성 예제1 - 부모 클래스의 메서드로 작업 수행

 

Coding 부모클래스에 studyCoding 메서드 있을 때,

하위 클래스에서 동일 메서드로 다른 작업 수행 가능.



[예제] Program.cs 생성.

 

using System;


namespace Homzzang

{

    class Coding

    {

        public virtual void studyCoding()

        {

            Console.WriteLine("코딩언어 강의");

        }

    }


    class Html : Coding

    {

        public override void studyCoding()

        {

            Console.WriteLine("HTML : 기본틀");

        }

    }


    class Css : Coding

    {

        public override void studyCoding()

        {

            Console.WriteLine("CSS : 디자인");

        }

    }


    class Program

    {

        static void Main(string[] args)

        {

            Coding coding = new Coding();

            Coding html = new Html();

            Coding css = new Css();


            coding.studyCoding();

            html.studyCoding();

            css.studyCoding();

        }

    }

}

 

결과값:

코딩언어 강의

HTML : 기본틀

CSS : 디자인


PS.

위 코드에서 굵은색 코드 (virtual, override) 없는 경우 결과값:

코딩언어 강의

코딩언어 강의

코딩언어 강의

 

이유: 

(virtual, override) 코드가 없으면,

부모 클래스의 메서드가 자식 클래스의 메서드를 덮어쓰기 때문임.

이를 막기 위해,

부모 클래스에 virtual 코드, 자식 클래스에 override 코드 각각 추가. 

 

 

다형성 예제2 - 사용자 입력값 따라 다른 작업 수행

 

사용자 입력값에 따라 동일 메서드로 다른 작업 수행.

 


[예제] Program.cs

 

using System;


namespace Homzzang

{

    class Coding

    {

        public virtual void studyCoding()

        {

            Console.WriteLine("코딩언어 강의");

        }

    }


    class Html : Coding

    {

        public override void studyCoding()

        {

            Console.WriteLine("HTML : 기본틀");

        }

    }


    class Css : Coding

    {

        public override void studyCoding()

        {

            Console.WriteLine("CSS : 디자인");

        }

    }


    class Program

    {

        static void Main(string[] args)

        {

            int input;

            Console.WriteLine("HTML: 1, CSS: 2 ?");

            input = Convert.ToInt32(Console.ReadLine());


            if (input == 1)

            {

                Coding html = new Html();

                html.studyCoding();

            }

            if (input == 2)

            {

                Coding css = new Css();

                css.studyCoding();

            }

        }

    }

}

 

결과값:

사용자가 1입력 시 : HTML : 기본틀

사용자가 2입력 시 : CSS : 디자인 



분류 제목
basic C# - Switch (스위치 조건문)
basic C# - While Loop (와일 반복문)
basic C# - For Loop (포 반복문)
basic C# - Break/Continue (브레이크/컨티뉴) 키워드 - 반복문 빠져나가기 / 특정 조건 건너띄기
basic C# - Arrays (배열)
method C# - Methods (메서드) - 정의/호출
method C# - Method Parameters (메서드 매개변수)
method C# - Method Overloading (메서드 오버로딩)
class C# - OOP (객체 지향 프로그래밍)
class C# - Class (클래스) / Object (객체)
class C# - Class Members (클래스 멤버) - 속성(=필드), 메서드
class C# - Constructors (생성자)
class C# - Access Modifiers (접근 수정자)
class C# - Encapsulation (캡슐화) ※ Getter (게터) / Setter (세터)
class C# - Inheritance (상속)
2/3
목록
 홈  PC버전 로그인 일본어
그누앞단언어
그누뒷단언어
그외코딩언어
그누보드
제작의뢰
Q&A
커뮤니티 2
웹유틸
회원센터
홈짱닷컴 PC버전 로그인