프로그래밍공부/C#기초

C# 프로그램 예제연습 - 텍스트게임만들기 - 03

Roslyn 2024. 1. 15. 09:40
반응형

지난 시간에 이어 이번에는 몹(Monster)를 정의해 봅시다.

우리는 이미 User.cs와 동일하게, IsDead, Name, Health 라는 3가지 옵션을 정의했습니다.

 

하지만 몹은 종류가 다양하죠.

그래서 몹이라는 동일 카테고리 안에 3가지 유형의 몹을 만들어보고자 합니다.

그리고 3가지 몹은 각기 다른 성향을 가지고 있을 겁니다.

하지만 모두가 공통된 "몹(Monster)" 속성을 가지고 있을 겁니다.

 

세가지 몹이 몹이라는 공통 속성을 가지기 위해 우리는 "상속"이란 개념을 배우게 될겁니다.

 

상속은 어떤 물건이나 특징을 다른 것에게 물려주는 개념이에요.
예를 들어, 우리가 가족에서 누군가로부터 물려받는 것을 생각해 볼 수 있어요.
상속을 프로그래밍에 적용하면, 새로운 것을 만들 때 이미 있는 것에서 일부를 물려받아서 사용할 수 있어요.
이것은 코드를 더 효율적이고 재사용 가능하게 만들어주는 중요한 프로그래밍 개념 중 하나에요.
가령, 동물을 생각해보세요. 동물에는 공통적인 특징이 있어요.
발이 4개이거나 눈이 있거나 하는 등이 그런 예에요. 그런데 고양이는 동물이기만 한 게 아니에요.
더 구체적인 특징을 가지고 있죠.
고양이는 츄르를 좋아하거나 새로 뛰어오를 때 꼬리를 살랑거리는 등의 독특한 특징이 있어요.
프로그래밍에서도 비슷한 아이디어가 적용돼요.
예를 들어, "동물" 클래스를 만들고, 그 안에 동물들이 공통적으로 가지는 특징과 동작을 정의할 수 있어요.
그리고 "고양이" 클래스를 만들 때 "동물" 클래스를 상속받아서, 동물들이 공통적으로 가지는 특징을 그대로 물려받으면서 추가적인 특징이나 동작을 정의할 수 있어요.
이런 식으로 상속을 이용하면, 코드를 논리적이고 구조화된 방식으로 설계할 수 있고, 유지보수가 쉬워지며, 새로운 것을 만들 때 이미 있는 것을 재사용할 수 있어요.
상속은 프로그래밍에서 중요한 원칙 중 하나이며, 코드를 더 효율적으로 만들 수 있도록 도와주는 도구라고 할 수 있어요.

 

상속의 개념이 이해되셨나요? 오롯이 이해되지 않았다 하더라도 괜찮습니다.  우린 손으로 이해할 거니깐요.

던전에서 만나게될 3가지 몹은 다음의 세가지라고 규정해보죠.

먼저 좀비, 스켈레톤, 미이라.  이 3가지 몹을 정의해 봅시다.

그리고 3가지 몹 말고도 최종적으로 싸워야할 보스가 있어야 겠죠?  보스는 강력한 뱀파이어라고 정의해 봅시다.

이들은 모두 몹이기 때문에, 동일한 Monster 클래스를 상속 받을 겁니다.

하나씩 속성을 정의해 보며 만들어 봅시다.

먼저 좀비부터 규정해 볼까요?

 

 

Entities 폴더에서 마우스를 우클릭하여 [추가] 버튼을 눌러 [클래스]를 추가해 봅시다.

클래스 이름은 Zombie.cs로 하죠.

 

    internal class Zombie : Monster
    {
        public Zombie()
        {
            this.Name = "좀비";
            this.IsDead = false;
            this.Health = 50;
        }
    }

 

생성된 코드에 상속 코드를 추가합니다.  Zombie라는 클래스 이름 옆에 Monster 라는 클래스를 콜론(:)으로 구분해서 넣어줬습니다.

이렇게 하면 Zombie라는 클래스는 Monster라는 클래스를 상속 받는 것이다, 라는 걸 선언한 겁니다.

그 다음 초기화 함수에서 Monster 함수에서 선언한 속성들을 그대로 사용할 수 있는 걸 볼 수 있습니다.

상속은 이러한 개념으로 작동하게 됩니다.

 

다시 이번에는 스켈레톤 클래스를 만들어 볼까요?

 

    internal class Skeleton : Monster
    {
        public Skeleton() 
        {
            this.Name = "스켈레톤";
            this.IsDead = false;
            this.Health = 80;
        }
    }

 

Skeleten.cs 로 파일을 생성한 후, 마찬가지로 Monster 클래스를 상속받아서, 이름과 피통(Health)를 정의해 주었습니다.

마지막으로 미이라도 만들어 볼까요?

Mummy.cs 라는 파일 이름을 만들어 주세요.

 

    internal class Mummy : Monster
    {
        public Mummy()
        {
            this.Name = "미이라";
            this.IsDead = false;
            this.Health = 120;
        }
    }

 

이렇게 해서 우리는 몹(Monster) 클래스를 상속받은 좀비(Zombie), 스켈레톤(Skeleton), 미이라(Mummy) 클래스를 만들었습니다.

어떤가요? 상속이란 개념이 조금 이해 되시나요?

 

이제 각 몹의 차이를 주어야 하는데, 현재는 세 몹의 차이가 피통(Health)밖에 없습니다.

아, 뭔가 더 필요할 것 같습니다.

이제 앞으로 우리가 이 세몹을 상대하기 위해서는 공격을 하고 또 공격을 받겠죠?

그럼 어느정도 피해를 주고 받을 것이냐? 즉 공격력이란 개념이 필요해 집니다.

그런데 이 공격력이 누구에게 특정한 특징일까요? 아니죠.  모두에게 공통된 개념입니다.

이런 경우 상속받은 몹(Monster) 클래스를 수정해 줌으로써, 상속받은 모든 몹이 공통적으로 지니게 할 수 있습니다.

자 Monster 클래스를 다음과 같이 수정해 봅시다.

    internal class Monster
    {
        public bool IsDead { get; set; }

        public string Name { get; set; }

        public int Health { get; set; }

        public int Attack { get; set; }

        public int Guard { get; set; }

        public Monster()
        {
            this.IsDead = false;
            this.Name = string.Empty;
            this.Health = 100;
            this.Attack = 0;
            this.Guard = 0;
        }
    }

 

자, 우리는 이제 공격력(Attack)과 방어력(Guard)라는 개념을 부모 클래스에 추가시켰습니다.

이제 각각의 몬스터에게 공격력과 방어력을 정의해 줍시다.

 

//Zombie.cs 내용 수정
public Zombie()
{
    this.Name = "좀비";
    this.IsDead = false;
    this.Health = 50;
    this.Attack = 8;
    this.Guard = 1;
}

//Skeleton.cs 내용 수정
public Skeleton() 
{
    this.Name = "스켈레톤";
    this.IsDead = false;
    this.Health = 80;
    this.Attack = 16;
    this.Guard = 0;
}

//Mummy.cs 내용 수정
public Mummy()
{
    this.Name = "미이라";
    this.IsDead = false;
    this.Health = 120;
    this.Attack = 10;
    this.Guard = 2;
}

 

위와 같이 몬스터의 공격력과 방어력을 정의해 줬습니다.

미이라는 공격력이 약한 대신 방어력과 맺집이 좋고, 스켈레톤은 맺집이 약한 대신 공격력이 좋습니다.

좀비는 둘 다 약한 만만한 상태로 정의했습니다.

 

어떠신가요? 이제 상속이란 개념이 이해되시나요?

프로그래밍에서 아주아주 중요한 개념이니 꼭 잘 기억해 두시기 바랍니다.

반응형