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

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

Roslyn 2024. 1. 12. 13:55
반응형

오늘은 먼저 User.cs 파일을 열어서 코드를 수정해 보겠습니다.

바로 엔티티(Entity)를 어떻게 정의해 나가는지 같이 보겠습니다.

 

자 플레이어가 있고, 몹을 잡을 겁니다.

플레이어는 게임이 시작되면 던전에 들어갈거고, 그곳에서 만나는 몹들을 하나씩 처치해서 최종 보스를 처치하면 게임이 클리어 되는 형태가 될 것입니다.

그럼 플레이어에게는 상태라는게 존재하게 되죠.

즉, 살았냐, 죽었냐 라는 걸 판별해야 합니다.  죽었다면 게임은 종료되겠죠.

죽는 과정은 플레이어의 생명력이 감소하기 시작해 0에 도달하면 죽는 거라고 할 수 있겠습니다.

그럼 생명력과 상태라는 두가지 지표가 필요해집니다.

이것을 속성, 즉 어트리뷰트(Attribute)라고 할 수 있습니다.

또한 플레이어에게는 이름을 입력받도록 하겠습니다.

그럼 총 3개의 속성이 필요해집니다.

그 3개의 속성을 다음과 같이 표현해 봤습니다.

 

namespace ConsoleExample.Game01.Entities
{
    internal class User
    {
        public bool IsDead { get; set; }

        public string Name { get; set; }

        public int Health { get; set; }

        public User()
        {
            this.IsDead = false;
            this.Name = string.Empty;
            this.Health = 100;
        }
    }
}

 

첫번째 IsDead는 이즈(is)와 죽음(Dead)이란 단어를 합쳐서 표현한, 플레이어가 죽었는지 여부를 체크하는 Boolean 함수를 만들었습니다.

 

그리고 플레이어의 이름을 저장할 문자열 변수인 네임(Name)과 생명력값을 숫자형태로 가지고 있을 헬스(Health) 변수를 각각 지정했습니다.

 

이들은 곧 플레이어(User)의 속성(Attribute)이 됩니다.

그리고 public User() 라는 부분은 마치 함수처럼 생겼지만, 반환형을 지정하지 않았습니다.  그리고 클래스와 이름이 동일하죠.   이것을 "초기화 함수" 라고 부릅니다.

 

플레이어(User) 클래스를 초기화 하는 부분으로 여기서  IsDead, Name, Health의 초기값을 설정해 주었습니다.

그런데 각 요소들 앞에 뭔가 이상한 단어가 보이시죠? 바로 this 입니다.

 

이 개념을 이해하기 위해서는 먼저 Class를 다시 한번 짚고 넘어가야 합니다.

클래스는 마치 비유를 해보자면 "붕어빵 틀"과 비슷합니다.

붕어빵을 만들기 위한 여러 개의 틀이 있듯이, 클래스는 프로그램에서 무언가를 만들기 위한 설계도나 틀을 의미해요.

예를 들어, 학교에는 학생들이라는 그룹이 있습니다. 이때, 학생들을 위한 틀을 만들면 어떨까요? 이것이 클래스입니다.
이 클래스에는 학생들이 가지는 공통된 특성과 행동을 정의할 수 있어요. 예를 들어, 모든 학생은 이름, 나이, 학년과 같은 특성을 가지고 있고, 숙제를 하는, 친구와 놀거나 운동을 하는 등의 행동을 할 수 있습니다.

 

이처럼 클래스는 비슷한 특성과 행동을 가지는 여러 객체를 만들기 위한 일종의 틀이라고 생각하시면 됩니다. 

클래스는 코드를 정리하고 재사용성을 높여주는데 도움이 됩니다.

 

클래스를 사용할 때, 보통 다음과 같은 형식으로 사용하게 됩니다.

 

User user = new User();

 

파헤쳐서 보면 다음과 같습니다.

User 라는 클래스를 user 란 이름으로 선언합니다.

선언된 user 라는 클래스에 대입(=) 연산자를 이용해 새로운 값을 넣는데, new 라는 명령어를 이용해 새로운 User 클래스를 생성해서 넣습니다.

실질적으로 실행되는 행위에 대해서는 뒤에 괄호()를 넣어줘야 합니다.

이때 실제로 값이 담아진 user 를 우리는 인스턴스(instance)라고 부릅니다.

 

앞서 붕어빵틀을 예로 들었는데, Class가 붕어빵 틀이라면 인스턴스는 그 붕어빵 틀에서 만들어진 붕어빵을 의미합니다.

붕어빵 틀로 여러개의 붕어빵을 만들 수 있죠?

마찬가지로 클래스도 여러개의 인스턴스를 만들 수 있습니다.

User user1 = new User();
User user2 = new User();
User user3 = new User();

 

위와 같은 코드로 우리는 벌써 3명의 User 인스턴스를 만들었습니다.

이것이 바로 클래스와 인스턴스의 개념입니다.

 

바로 여기서 this의 개념이 등장하게 됩니다.


"this"는 프로그래밍에서 개체지향 언어에서 사용되는 특별한 키워드로, 주로 클래스의 인스턴스(개체)를 가리키는 데에 사용됩니다. 여러 언어에서 이 개념은 다르게 구현되지만, 일반적으로 현재 작업 중인 인스턴스를 가리킨다는 공통된 개념이 있습니다.

 

즉 this란 나 자신을 의미합니다.

user1 인트턴스 안에서 this.Name 이라고 한다면, 그것은 곧 user1의 이름을 의미합니다.

나 자신의 이름이란 뜻입니다.

 

이 모든 것들이 아직은 잘 이해되지 않을 수도 있습니다.

잘은 몰라도 어렴풋하게 나마 알것 같다 싶으면 된 겁니다.

우리는 머리가 아니라 손으로 이해할 거니깐요.

 

그리고 위에 3개의 속성을 몬스터에게도 동일하게 만들어 주세요.

 

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;
    }
}

 

이로써 우리는 플레이어와 몬스터의 아주 기본적인 속성을 만들어 보았습니다.

반응형