해당 글은 <C#과 유니티로 만드는 MMORPG 게임 개발 시리즈> 강의를 정리한 글입니다.
중복되는 데이터들을 객체마다 추가하는 것은 비효율적 ❗
ex) 종류가 수백가지이상이 되는 몬스터의 경우 😖
💡 이러한 경우에 사용하게 되는 개념이 상속이다.
사용 예시
class Player // 부모 or 기반 클래스
{
static public int counter = 1;
public int id;
public int hp;
public int attack;
public Player()
{
Console.WriteLine("Player 생성자 호출!");
}
}
class Knight : Player // 자식 or 파생 클래스
{
static public Knight CreatKnight()
{
Knight knight = new Knight();
knight.hp = 100;
knight.attack = 1;
return knight;
}
public Knight(){
Console.WriteLine("Knight 생성자 호출!");
}
}
class Program
{
static void Main(string[] args)
{
Knight knight = Knight.CreatKnight();
}
}
결과
Player 생성자 호출!
Knight 생성자 호출!
부모 클래스의 기본 생성자가 아닌 생성자 호출하기
class Player // 부모 or 기반 클래스
{
static public int counter = 1;
public int id;
public int hp;
public int attack;
public Player()
{
Console.WriteLine("Player 생성자 호출!");
}
public Player(int hp)
{
Console.WriteLine("Player hp 생성자 호출!");
}
}
class Knight : Player // 자식 or 파생 클래스
{
static public Knight CreatKnight()
{
Knight knight = new Knight();
knight.hp = 100;
knight.attack = 1;
return knight;
}
public Knight() : base(100)
{
base.hp = 100; // 부모 클래스의 변수 접근
Console.WriteLine("Knight 생성자 호출!");
}
}
class Program
{
static void Main(string[] args)
{
Knight knight = Knight.CreatKnight();
}
}
결과
Player hp 생성자 호출!
Knight 생성자 호출!
부모 클래스의 속성과 기능을 자식 클래스가 이어받아 사용할 수 있다.
class Player // 부모 or 기반 클래스
{
static public int counter = 1;
public int id;
public int hp;
public int attack;
public void Move()
{
Console.WriteLine("Player Move");
}
public void Attack()
{
Console.WriteLine("Player Attack");
}
}
class Knight : Player // 자식 or 파생 클래스
{
}
class Program
{
static void Main(string[] args)
{
Knight knight = new Knight();
knight.Move();
}
}
클래스 형식 변환
Player (부모 클래스), Mage (자식 클래스)
Mage 타입 -> Player 타입 ⭕
Player 타입 -> Mage 타입 ❓
확인하는 방법
static void EnterGame(Player player)
{
bool isMage = (player is Mage); //1.
if (isMage)
{
Mage mage = (Mage)player;
mage.mp = 10;
}
Mage mage = (player as Mage); //2.
if (mage != null)
{
mage.mp = 10;
}
}
static void Main(string[] args)
{
Knight knight = new Knight();
Mage mage = new Mage();
//Mage 타입 -> Player 타입
//Player 타입 -> Mage 타입 ?
Player magePlayer = mage;
Mage mage2 = (Mage)magePlayer;
EnterGame(knight);
EnterGame(mage);
}