안녕하세요 아임코딩입니다.
이번에는 객체지향 프로그래밍 언어의 중요한 특징 중 하나인 다형성에 대해서 알아보겠습니다.
유튜브 링크
다형성 설명
다형성은 하나의 코드가 여러 가지 형태로 실행될 수 있도록 하는 것입니다.
다형성은 크게 오버로딩(overloading)과 오버라이딩(overriding)으로 나눌 수 있습니다.
오버로딩(overloading): 같은 이름의 메서드를 여러 개 정의하는 것입니다. 매개변수의 타입, 개수, 순서가 다른 경우에는 서로 다른 메서드로 인식됩니다.
오버라이딩(overriding): 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의하는 것입니다. 자식 클래스에서는 부모 클래스의 메서드와 동일한 이름과 매개변수를 가진 메서드를 정의합니다. 이렇게 하면 상위 클래스의 메서드가 자동으로 가려지고, 하위 클래스의 메서드가 실행됩니다.
C#으로 구현하는 간단한 오버라이딩에 대해서 알아보겠습니다.
메서드 오버라이딩
오버라이딩은 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의하는 것을 의미합니다.
예제 코드를 살펴보겠습니다.
public class Parent //부모 클래스
{
public void print()
{
Console.WriteLine("Parent 클래스의 print 함수입니다.");
}
}
public class Child : Parent //Parent 클래스 상속
{
public void print() //메서드 오버라이딩
{
Console.WriteLine("Child 클래스에서 재정의한 print 함수입니다.");
}
}
부모 클래스 Parent 는 print() 메서드를 가지고있습니다.
Child 클래스는 Parent 클래스를 상속받아 print() 메서드도 상속받습니다.
하지만 Child 클래스에서 print() 메서드를 다시 정의하는 것을 확인할 수 있습니다.
이것이 바로 메서드 오버라이딩입니다.
부모 클래스에서 정의된 메서드를 자식 클래스에서 다시 정의하는 것이 메서드 오버라이딩입니다.
프로그램 실행
위 코드를 클래스를 기반으로 객체를 만들어 메서드를 호출해보겠습니다.
using System;
namespace Tistory
{
internal class Program
{
public class Parent //부모 클래스
{
public void print()
{
Console.WriteLine("Parent 클래스의 print 함수입니다.");
}
}
public class Child : Parent //Parent 클래스 상속
{
public void print() //메서드 오버라이딩
{
Console.WriteLine("Child 클래스에서 재정의한 print 함수입니다.");
}
}
static void Main(string[] args)
{
Parent p = new Parent(); //Parent 클래스 객체 p 생성
Child c = new Child(); //Child 클래스 객체 c 생성
p.print(); //p 객체의 print() 메서드 호출
c.print(); //c 객체의 print() 메서드 호출
}
}
}
Parent 클래스와 Child 클래스에 대해서는 위에서 설명했으니
Main 함수에 대해서만 설명하겠습니다.
Parent p = new Parent(); Parent 클래스 객체 p 를 선언하고 할당합니다.
Child c = new Child(); Child 클래스 객체 c 를 선언하고 할당합니다.
p.print(); p 객체의 print() 메서드를 호출합니다.
c.print(); c 객체의 print() 메서드를 호출합니다.
p.print() 는 부모 클래스에서 정의된
public void print()
{
Console.WriteLine("Parent 클래스의 print 함수입니다.");
}
가 실행이 됩니다.
c.print() 는 자식 클래스에서 정의된
public void print()
{
Console.WriteLine("Child 클래스에서 재정의한 print 함수입니다.");
}
가 실행이 됩니다.
함수 이름은 print() 로 같지만 실행되는 코드는 다른 것을 확인할 수 있습니다.
이것이 바로 다형성입니다.
다형성을 구현하는 방법 중 하나인 메서드 오버라이딩을 알아봤습니다.
'프로그래밍 > C#' 카테고리의 다른 글
[C#] 기본 입력 Console.ReadLine() (0) | 2023.05.05 |
---|---|
[C#] 추상화 abstract, interface (0) | 2023.05.05 |
[C#] 다형성 (메서드 오버로딩) method overloading (0) | 2023.05.05 |
[C#] 상속 (0) | 2023.05.05 |
[C#] 캡슐화 (0) | 2023.05.05 |