https://sicilian-najdorf.tistory.com/9
이전 글에 이어서 TIL을 작성한다.
이번 글에선 LINQ, 고급 자료형, 본격적인 텍스트 RPG 게임 만들기에 대해 다룰 것이다.
LINQ란?
.NET 프레임워크에서 제공되는 쿼리 언어 확장이다.
데이터베이스에서 다양한 작업을 지원하는 확장인데,
데이터를 다뤄서 그런지 정보처리기능사를 준비할 때 배웠던
SQL과 문법이 상당히 비슷하다고 생각했다.
사용 목적이 그렇듯, xml 확장자 파일을 다룰 때 유용할 것 같다.
대략적인 구조는 아래와 같다.
var result = from 변수 in 데이터소스
[where 조건식]
[orderby 정렬식 [, 정렬식...]]
[select 식];
다음 고급 자료형을 알아보기 전에,
우선 null 값에 대한 이해가 필요하다.
null은 '아무것도 없음' 을 의미한다.
(!!!!숫자 0과는 매우 다르다!!!!)
참조형 변수가 어떠한 객체를 참조하지 않을 때,
null 값이 들어있다고 볼 수 있다.
고급 자료형인 Nullable은
C#에서 null 값을 가질 수 있는 값형에 대한 형식이다.
기본적으로 값형은 null 값을 허용하지 않는다.
따라서, 구조체나 기타 값형 변수가 null 값을 할당하기를 원한다면,
여기서 nullable을 선언할 수 있는 것이다.
선언 방식은 '?' 연산자를 사용해서 선언된다.
선언할 자료형 뒤에 ?만 붙이면 nullable이 되는데,
가령 int 형식의 자료형이 nullable이고 싶으면,
int? 로 변수를 선언하면 된다.
int myValue1; // 그냥 일반 int 자료형
int? myValue2; // 근데 nullable을 곁들인;;
변수에 null 값인지 아닌지 확인하려면
HasValue를 사용하면 된다.
if (myValue2.HasValue)
{
Console.WriteLine("값 있음");
}
else
{
Console.WriteLine("값 있는 줄 알았지 ㅋㅋㅋ null이지롱 ㅋㅋㅋㅋㅋ");
}
위에서 ? 연산자를 사용하니
? 연산자는 도대체 뭘까?(연산자 아님)
라는 의문이 들 수 있다.
그래서 기타 ?가 들어간 연산자를 찾아봤다.
기본적으로 ?는 null 조건부 연산자로,
메서드에 사용했을 때
앞에 있는 것이 null 이 아니면 실행,
null이면 실행하지 않는 식으로 사용된다.
?? 는 null 병합 연산자로,
?랑 비교했을 때 ?는 null 값이면 그냥 실행 안 한다면,
??는 null 값이면 뒤에 있는 값을 사용한다.
그리고
계속 ??만 쓰니깐
????? 만 계속 쓰고 싶은데
가만 자세히 보면
연산자 중에 ??가 가장 귀여운 것 같다.
마지막으로, 과제인 텍스트 RPG 게임 만들기 인데...
생...각보다 코드에 뼈대를 세우면 금방 만들 것이란 확신이 들었다.
(근데 아님)
// 프로그래밍 기초 개인 과제 - 텍스트 RPG 게임 만들기
class Player
{
// 플레이어의 능력치
int level = 1;
string name = "Chad";
string job = "전사";
int atk = 10;
int def = 5;
int hp = 100;
int gold = 1500;
// 플레이어의 행동
int Action()
{
// 입력 받는 부분?
return 0;
}
}
class GameScene
{
public void GameInit()
{
Console.Write("스파르타 마을에 오신 여러분 환영합니다.\n이곳에서 던전으로 들어가기 전 활동을 할 수 있습니다.\n\n");
Console.WriteLine("1. 상태 보기");
Console.WriteLine("2. 인벤토리");
Console.WriteLine("3. 상점");
}
public void ViewStatus()
{
Console.Write("상태 보기\n캐릭터의 정보가 표시됩니다.\n\n");
}
public void ViewInventory()
{
Console.Write("인벤토리\n보유 중인 아이템을 관리할 수 있습니다.\n\n");
}
public void ViewShop()
{
// 상점 보기
}
}
class Program
{
static void Main(string[] args)
{
GameScene MainScene = new GameScene();
MainScene.GameInit();
}
}
뼈대를 만든 건 여기까지 인데,
콘솔에 입력받는 부분이 겹쳐서 이걸 메서드 하나로 정의할까? 하는 아이디어가 있다.
내일은 본격적으로 과제 제출에 집중해서
정말 멋있는 텍스트 RPG 게임을 만들도록 해야겠다.
'TIL(Today I Learned)' 카테고리의 다른 글
텍스트 RPG 게임 만들기 (3), 알고리즘 기초 - TIL#10 (0) | 2024.01.05 |
---|---|
텍스트 RPG 게임 만들기 (2) - TIL#9 (0) | 2024.01.04 |
C# 기초 문법 나머지, 텍스트 RPG 게임 만들기 - TIL#8 (1) (0) | 2024.01.03 |
C# 문법 기초, 콘솔 숫자야구 게임 만들기 - TIL#7 (2) | 2024.01.02 |
C# 문법 기초, 새로 알게 된 사실과 느낀 점 - TIL#6 (0) | 2023.12.29 |