2025.08.09 - [C#/C# 문법] - C# 중급 문법 (3) : 상속과 다형성
多形性
다형성, 한자의 뜻을 풀어본다면 다양한 형태를 가지는 성질이다.
객체 지향 프로그래밍에서 설명하는 다형성이란, 다음과 같다.
어떤 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질.
이 특징은 우리의 삶에서도 찾아볼 수 있다.
당신은 사회에서 어떤 위치에 있고,어떤 직위를 가지고 있으며, 관계를 맺고 있는가?
우리는 누군가의 자식이며, 누군가의 친구이고, 누군가의 직장 동료이며, 누군가의 고객이고, 누군가의 모르는 사람이다.
이것이 객체 지향 프로그램에서 말하는 다형성이다. 그래서 오버로드와 오버라이드가 있는 것이다.
같은 이름의 메서드가 상황에 따라 다른 역할을 수행 가능하다는 것.
다형성의 예시
다형성의 정의는 다음과 같다.
”한 타입의 참조변수를 통해 여러 타입의 객체를 참조할 수 있도록 만든 것을 의미합니다. 좀 더 구체적으로, 상위 클래스 타입의 참조변수로 하위 클래스의 객체를 참조할 수 있도록 하는 것입니다.”
Car 클래스 구현
public class Vehicle
{
protected float Speed;
protected void Movefront();
protected void MoveBack();
}
public class Car : Vehicle
{
//Car는 Vehicle을 상속받았으니 상위 클래스가 가지고 있는 것을 다 가지고 있음
//그러나, 부모 클래스와는 다른 기능(양 옆으로 움직이는 기능(메서드))를 가지고 있음
protected void TurnLeftOrRight();
}
위 코드는 Vehicle 이라는 상위 클래스가 있고, Car 라는 하위 클래스가 Vechicle을 상속받았다.
이어서 다음 예시를 보자.
public class World
{
Car car1 = new Car(); //새로운 객체 생성
Vehicle car2 = new Car();//두번째 객체 생성
}
이 코드를 보면 우리는 두 개의 새로운 객체를 생성하는 코드이다. 그런데, car1의 타입은 Car이지만, car2의 타입은 Vehicle이다. 그런데도 Car 클래스를 통해 객체를 생성을 해도 오류가 뜨지 않는다.
왜냐하면 Car 클래스는 Vehicle이라는 상위 클래스를 상속 받은 하위 클래스이기 때문이다.
즉, 예시 전에 얘기했던 다형성의 정의는 상위 클래스 타입의 참조 변수로 하위 클래스 객체를 참조하는 것이 가능하다는 뜻이 된다.
그래서 뭐가 좋음?
다음 예시를 보면 좀 더 확실하게 다가올 것이다.
public class Player{}
public class Knight : Player {}
public class Archer : Player {}
public class Wizard : Player {}
//전사, 궁수, 마법사는 Player를 상속 받은 하위 클래스임
public class World
{
public Knight player1 = new Knight();
public Archer player2 = new Archer();
public Wizard player3 = new Wizard();
List<Player> players = new List<Player>();
players.Add(player1);
players.Add(player2);
players.Add(player3);
}
위 코드같은 경우도 가능하다는 뜻이다.
- 전사, 궁수, 마법사 모두 Player 클래스를 상속 받은 하위 클래스이다.
- player1, 2, 3를 각각 전사, 궁수, 마법사로 객체화한다.
- Player 클래스만 담을 수 있는 리스트 players를 선언한다.
- player1, 2, 3을 players에 담는다.
이 경우, 코드는 오류없이 흘러갈 것이다.
플레이어를 담기 위해 선언한 리스트에서 전사, 궁수, 마법사가 모두 담을 수 있음.
'C# > C# 문법' 카테고리의 다른 글
| 객체 지향 프로그래밍 - 캡슐화란 (0) | 2025.09.15 |
|---|---|
| 클래스와 구조체의 차이 (0) | 2025.09.13 |
| 추상 클래스와 인터페이스의 차이 (0) | 2025.09.11 |
| C# 중급 문법 (8) : 익명 메서드와 람다식 (0) | 2025.09.02 |
| C# 중급 문법 (7) : 델리게이트와 이벤트 (1) | 2025.08.31 |
