자 그럼 오늘은 클래스의 설계에 대해서 해보겠습니다.

우리는 TxtRpg에 대해서 만들려고 합니다. 그 중에서 당연히 먼저 플레이어와 몬스터를 설계해 보려고 합니다.

자 주인공이라면 이름이 있어야 하니 문자열을 저장할 수 있어야 합니다. 문자열은 string으로 나타내집니다.

그리고 주인공이니 공격을 할 수 있어야 합니다. 공격을 하려면 공격력이라는 속성이 필요할 것 같습니다. 있어야 합니다.

공격력은 소수점까지 공격력을 판정하지 않을 테니 정수형이어야 할 것입니다. C#에서 정수형 자료형은 int가 있으니 int로 하겠습니다.

그런 식으로 이름, 공격력, 체력, 방어력과 같은 속성을 지정하여 클래스를 설계해보겠습니다.

우리는 클래스에 변수를 선언할 때 항상 고민을 해봐야 합니다. 정수라는 것도 결국 0과 1로 이루어진 데이터일 뿐입니다. 하지만 그렇기 때문에 표현에 한계가 있습니다. 레벨스케일링이 잘못된 게임들은 게임의 단위를 전체적으로 축소하기도 합니다.(wow의 드군 레벨스케일링)같은 경우.

그러니 초기에 변수의 선언에서도 자료형의 표현한계 등을 생각하여 클래스를 설계하는 것이 중요합니다.

자 그럼 플레이어 클래스를 설계했으니 이제 몬스터 클래스도 설계하도록 해보겠습니다. 사실 몬스터도 플레이어와 전혀 다를 것이 없습니다. 그저 클래스만 구분해서 이 녀석은 몬스터라고 분류할 뿐이죠. 일단 몬스터 클래스를 만들기 위해서 이전에 플레이어클래스를 만들 때와 동일하게 클래스를 만들어 보도록 하겠습니다.

 

 

자 몬스터 클래스를 추가하면 Monster.cs파일이 생성될 것입니다. 플레어이와 완전히 같은 내용으로 채워보도록 하겠습니다.

자 이제 우리는 몬스터와 플레이어 클래스 2개의 클래스를 만들었습니다.

C#은 객체지향프로그래밍을 추구합니다. 객체지향 프로그래밍의 기본적인 요소는 말그대로 객체라는 것을 사용하여 저번에 설명 드렸지만 클래스객체를 만든 것이 아닌 객체를 만들기 위한 설계도를 만든 것이라고 생각하시면 됩니다. 즉 이제 플레이어와 몬스터의 설계도가 준비되었으니 이 설계도를 통해서 플레이어와 몬스터를 만들고 그 둘을 싸우게 해야 합니다.

당연한 이야기지만 객체를 생성하기 위한 코드를 작성해야 합니다. 객체를 생성하기 위한 코드는 main함수에 작성해야 합니다. 이유는 저번에 설명 드렸지만 프로그램의 시작은 main함수에서부터 시작하기 때문입니다.

 

 

자 다음과 같이 코드를 쳤다면 이제 설계도를 기반으로 플레이어를 만드는 코딩을 한 것입니다.

다음 강의에서는 몬스터와 플레이어가 서로 공격을 하는 코드와 함께 접근제한자에 대해서 알아보겠습니다.

Posted by JJOREG

내가 게임개발 하는 법 3강

자 그럼 오늘은 클래스의 초입과 자료형(DATA TYPE)에 대해서 공부해 보도록 하겠습니다.

클래스란 객체지향 프로그래밍의 객체를 만들기 위한 설계도에 해당하는 것입니다.

처음 객체지향 프로그래밍 언어를 배우고 이해하는 부분에서 가장 잘못된 이해가

클래스 = 객체 즉 클래스와 객체를 동일한 것으로 생각하는 것입니다.

분명히 말씀드릴 수 있는 것은 클래스는 객체가 아니며 객체란 클래스를 통해서 생성된 프로그램 상에서 사용되는 실체라고 생각하시면 됩니다.

SF적으로 비유해서 로봇만으로 이루어진 세상이 존재한다고 생각해보면 클래스는 로봇을 생산하기 위한 공장과 설계도역할을 한다고 생각하시면 될 듯 합니다.

로봇을 생산하는 공장 및 설계도 -> 클래스

로봇 -> 객체

객체는 내부에 멤버변수멤버함수라는 요소들을 가질 수 있습니다.

위의 내용을 그냥 이론대로 설명하는 것은 굉장히 재미 없는 일이라고 생각합니다. 즉 우리 프로젝트에 맞는 필요에 의한 클래스 설계를 알아보도록 하겠습니다.

자 RPG를 생각하면 일반적으로 플레이어라고 불리는 녀석이 존재합니다. 주인공이죠. 내가 조종하는 RPG의 주인공이라는 녀석의 설계도를 클래스를 이용하여 만들어 보도록 하겠습니다.

주인공을 설계하기 위한 클래스를 만들기 위해서는

다음과 같이 솔루션 내부에 존재하는 프로젝트에서 오른쪽 버튼을 누르면 ADD 항복이 있고 그 다음 -> Class라고 불리는 항목을 선택하면 클래스를 만들 수가 있습니다. 선택을 하게 되면 클래스와 클래스 파일이 만들어지게 됩니다. 이때 클래스의 이름은 CPlayer이라고 정하겠습니다.

즉 다음과 같이 클래스가 만들어지며 CPlayer이라는 클래스의 선언이 존재하게 됩니다. 이 플레이어의 클래스선언이 바로 플레이어의 설계도의 첫 부분이 됩니다.

이때 지금 만든 방법 때문에 오해하실 수 있는 부분이 클래스를 만들려면 파일도 같이 생성해야 하는 건가? 라는 점일 수 있습니다. 실제 하나의 파일에서는 여러 개의 클래스가 존재할 수 있습니다.

다음과 같이 말이죠.

물론 저 Monster이라는 클래스도 만들 겁니다. 하지만 이것은 하나의 파일에 2개의 클래스를 선언해도 문제 없다는 것을 보여드리기 위해서 작성해본 예제입니다. 실제로 하나의 파일에 하나의 클래스를 생성하는 것이 좋습니다.

하지만 위와 같이 선언할 수 있음에도 굳이 파일 별로 클래스를 분할하는 이유는 다음과 같습니다. 클래스 안에 담아야 하는 내용이 너무나도 많아서 하나의 파일의 코드량(하나의 파일에 코드량이 많아지면 클래스의 내용을 파악하기가 힘들어 집니다.)이 비대해 질 가능성이 있기 때문입니다.

자 그럼 클래스의 생성과 선언에 대해서 알아 보았고 다음은 멤버변수에 대해서 알아보도록 하겠습니다.

멤버변수란 다음과 같이 선언이 가능합니다. 멤버변수를 선언하기 위한 필수요소로는 자료형(DATA TYPE)과 이름이 존재합니다. 자료형(DATA TYPE)이란 이 변수가 가지는 변수의 형태와 크기를 의미하며 이름은 변수의 위치를 의미한다고 할 수 있습니다.

자 저의 설명이 너무 이론적이었다면 좀더 풀어서 설명해 보도록 하겠습니다.

  1. 컴퓨터는 0과 1의 데이터로 이루어진 집합체 입니다.(컴퓨터는 실제로 0과 1밖에 저장하지 못합니다.)
  2. 하지만 0과 1로 이루어진 데이터는 사람이 이해하기에는 난해할 수밖에 없습니다.

    Ex) 00010001 이게 숫자 17을 나타낸다고 일반사람은 이해하기 힘들 것입니다.

  3. 그래서 사람이 이해하기 쉽게 만들어진 것이 고급언어인데. C#은 그런 고급언어 중 하나입니다.
  4. 하지만 결국 고급언어도 최종적으로는 000111010101010101과 같은 0과 1로 변환되게 됩니다.
  5. 자 그럼 여기서 RAM이라는 녀석이 나옵니다.
  6. 자 램에도 000101010101010과 같이 데이터가 있을 것입니다. 컴퓨터에서 모든 것은 0과 1로밖에 표현하지 못하고 램도 결국 0과 1을 저장하고 있으니까요.
  7. 그리고 결국 우리의 프로그램도 RAM이라는 곳에 010101010101010로 이진화 되어 데이터로 올라가 있습니다.

이 0이냐 1이냐를 1비트라고 부릅니다.

자 그럼 우리의 프로그램이 실행되면 다음과 같이 이루어져 있다고 생각해 보겠습니다.

자 그럼 위에 우리가 선언한 2가지 변수 중 int m_iLv가 저 RAM의 메모리의 어느 곳에 얼마만큼 위치에 존재한다고 어떻게 특정할 수 있을까요? 바로 다음과 같이 설명할 수 있습니다.

와 같은 내용입니다.

위와 같은 내용 때문에 변수를 선언할 때는 꼭 자료형 그 다음 이름이 필요한 것입니다. 자료형이 없다면 RAM안에 얼마만큼의 크기로 이 데이터가 존재할지 특정할 수 없으며 이름이 없다면 이 데이터가 어디에 위치하는지 특정 지을 수 없는 것입니다.

여기서 이름은 우리가 마음대로 지을 수 있지만 자료형은 이미 C#에서 여러가지 자료형을 지원하고 있습니다. 이를 기본 자료형이라고 부르며 다음과 같은 종류가 존재합니다.

자 그럼 기본 자료형에 대해서 알아보았고 다음 강의에서는 클래스 설계에 있어서 멤버변수와 자료형이 어떤 의미를 가지는가를 알아보도록 하겠습니다.

Posted by JJOREG

자 이제 어제 해봤던 내용까지 보자면 우리는 간단한 프로그램을 한번 만들어서 실행해봤습니다.

그럼 이제 첫 줄 한 줄 한 줄씩 한번 살펴보며 기본 프로그램의 구조에 대해서 파악해 보겠습니다.

자 USING 선언은 네임 스페이스에 대한 사용을 하겠다고 하는 것입니다. 이것이 무슨 말이냐? 간단히 말씀드리자면 다음과 같은 내용을 의미합니다. C#의 가장 기본적인 능을 지원하는데 그 내용들은 네임스페이스로 System이라는 내용으로 감싸여 있습니다. 즉 그것에 대한 사용권을 가져오겠다고 말하는 것입니다. 그럼 도대체 System에서 무엇을 지원하느냐 물어보신다면 우리가 사용한 Console 이 녀석 자체가 이미 System에 속한 클래스 라는 기능입니다.

콘솔에 커서를 가져다 보면 다음과 같이 class System.Console라고 명명되어있는 것을 확인할 수 있습니다. 즉 콘솔에 텍스트를 띄우기 위해서 사용한 Console이라는 녀석도 System에 속한 기능이라는 말입니다.

더 확실히 알고 싶다면 다음과 같이 선택해 보겠습니다.

자 위의 기능을 누르거나 Console에 커서를 대고 F12를 누르게 되면 Console라는 기능을 확인할 수 있습니다.

 

위와 같이 외부에 선언된 코드가 있고 그 코드는 System이라는 네임 스페이스 영역에 감싸져 있습니다.

그럼 네임스페이스란 어떤 녀석인지 알아보겠습니다.

 

위에서 봤던 System의 모양과 우리 프로그램 코드의 모양이 비슷하다는 것을 아실 수 있습니다. 우리의 프로그램은 SharpRpgProject라는 네임스페이스 안에 쌓여져 있습니다. Console라는 녀석도 클래스라는 선언 안에 있다는 것을 확인해보면 그 상위에는 System이라는 네임스페이스 안에 존재한다는 것을 알 수 있습니다.

좀더 확실히 알아보기 위해서 다음과 같이 해보겠습니다.

자 using System을 주석을 걸자 Console라는 기능이 사용이 불가능해진 것을 확인할 수 있습니다. 즉 using이라는 선언은 네임스페이스의 이름을 사용하겠다는 기능이라는 것이 좀더 명확해 집니다. 물론 using을 하지 않아도 System.Console이라고 명시적으로 이름을 지정해주면 사용이 가능해지는 것도 알 수가 있습니다.

 

자 다음은 필드에 대해서 알아보겠습니다. 필드란 { }의 기호를 의미합니다. C#에서 필드는 다음과 같은 종류가 있습니다.

namespace 필드

enum 필드, class 필드, struct 필드

함수 필드

함수내 지역 필드

 

 

{ } 이런 필드 기호는 항상 시작이 있으면 끝이 있어야 합니다. 또한 영역이기 때문에 내부에 또 다른 필드 영역을 가지는 경우가 많습니다. 즉 현재 단계는 다음과 같은 필드 영역을 가지고 있는 것이죠.



 

 

 

 

 

 

  

 

필드의 시작과 끝은 굉장히 중요한 개념입니다. 즉 어떠한 키워드나 선언이 어디까지 영향을 미치는가를 지정해주는 기호라고 생각해주시면 됩니다.

 

다음으로 class Program클래스에 대해서 알아보겠습니다.

클래스란 객체지향 프로그래밍의 핵심요소인 객체의 설계도 역할을 담당하는 것입니다.

클래스를 이용하여 프로그래밍을 하면 좀더 재사용성이 높고 인간의 사고에 좀더 가까운 프로그래밍이 가능합니다.

일반적인 프로그래밍에서는 클래스보다는 변수나 함수에 대해서 배우지만 C#프로그래밍에 대해서 공부하신다면 클래스에 대해서 먼저 공부를 하는 것이 좋다고 봅니다. 하지만 현재는 기본 프로그램의 구조를 확인하는 것이 우선이므로 간단한 클래스의 선언 방식만 확인해 보겠습니다.

클래스의 선언은 일반적으로 다음과 같이 합니다.

 

 

 

 

 

자 그럼 현재 우리의 프로그램은 기본적으로 class Program안에 모든 내용이 들어있는 상태입니다. 클래스는 바로 다음 강좌에서부터 자세하게 배우게 됩니다.

그럼 마지막으로 Main함수에 대해서 알아보겠습니다.

일반적으로 프로그래밍이란 순서가 존재합니다. 하지만 시작점이 없다면 컴퓨터는 이 프로그램을 어디에서부터 시작할지 알 수가 없습니다. 컴퓨터 언어라는 것은 소설과 같습니다. 소설은 첫 부분부터 읽지 않으면 전체의 내용을 파악하기 힘들 것입니다. 그 소설의 첫 부분 역할을 하는 것이 바로 Main함수입니다.

 

 

즉 우리의 프로그램을 실행했을 때 "샵알피쥐프로젝트 스타트" 그 다음 "SharpRpgProject Start" 순서대로 시작한 것은 저 Main함수라는 함수의 필드 내부에서 한줄 한줄 실행된 결과가 우리의 프로그램의 결과가 되는 것입니다.

자 그럼 C# 프로그래밍의 기본 구조에 대해서 알아보았고 다음 강의에서는 클래스와 변수 그리고 메모리에 대해서 알아보겠습니다.

Posted by JJOREG