내배캠 2주차 C# 문법

오도독·2024년 4월 22일

내배캠

목록 보기
6/26
post-thumbnail

이번 주는 C# 문법에 대한 강의를 들으면서 개인프로젝트를 진행할 예정이에요.
그래서 TIL은 강의를 듣고 제가 잘 몰랐던 부분에 대해서 정리하려고 합니다.
1주차 강의에서는 C#에 대한 간단한 설명과 변수와 자료형, 연산자와 문자열 처리에 대한 내용이었어요.


강의내용 정리

C# 언어와 .NET프레임워크

○ C# 언어란?

C# 언어는 마이크로소프트에서 만든 객체지향 프로그래밍 언어로 안전하고, 형식이 분명한게 특징이에요.
"강력한 형식 시스템"과 "가비지 컬렉션 기능"을 제공하고 다양한 플랫폼에서 사용이 가능하며,
.NET 프레임워크에서 실행되고 C, C++, Java 등 다른 언어들과 문법 및 구조적으로 유사해요.

  • 강력한 형식시스템은 변수나 객체의 자료형이 미리 정의되어 있어 데이터 타입에 대한 안전성과 정확성을 보장하는 시스템을 말해요.
  • 가비지 컬렉션 기능은 동적 할당된 메모리를 자동으로 회수해주는 기능이에요.
    C#에서는 개발자가 메모리를 직접 할당하고 해제하는 대신, .NET 프레임워크에서 가비지 수집기가 자동으로 메모리를 해제해줘요.

○ .NET 프레임워크란?

.NET 프레임워크는 마이크로소프트에서 개발한 프로그래밍 플랫폼으로, 다양한 프로그래밍 언어를 지원하며, 개발자가 손쉽게 애플리케이션을 개발할 수 있도록 도와주는 플랫폼이에요.


C#에서의 입출력

○ 출력

C#에서 콘솔 출력은 Console.WriteLineConsole.Write 메소드를 사용해요.

Console.WriteLine(value);
Console.Write(value);

다음과 같이 사용하는데 value값에는 출력할 값이 들어가는데 문자열, 숫자, 변수, 연산식 등 어떤 값이든 사용할 수 있어요.
WriteLine메소드는 인수로 전달된 값을 출력하고 줄바꿈 문자열을 추가해주고, Write메소드는 줄바꿈 문자열을 추가해주지 않아요.

  • 이스케이프시퀸스(Escape Sequence)
    문자열 내에 특수한 문자를 포함시키기 위해 사용되는 특별한 문자 조합이에요.
    \키를 사용하여 특수문자를 삽입할 수 있습니다.
이스케이프 시퀀스설명
\'작은따옴표(') 삽입
\"큰따옴표(") 삽입
\\역슬래시(\) 삽입
\n줄바꿈 삽입
\r현재 줄 맨 앞으로 이동
\t탭 삽입
\b백스페이스 삽입

ex)

Console.WriteLine("Hello\nWorld");
// 출력결과
// Hello
// World

Console.WriteLine("Name\tAge");
Console.WriteLine("Kero\t30");
Console.WriteLine("Young\t25");
// 출력결과
// Name    Age
// Kero    30
// Young   25

Console.WriteLine("We learn \"C# Programming\"");
// 출력결과
// The book is called "C# Programming"

Console.WriteLine("He said, \'Hello\' to me.");
// 출력결과
// He said, 'Hello' to me.

Console.WriteLine("C:\\MyDocuments\\Project\\");
// 출력결과
// C:\MyDocuments\Project\

○ 입력

콘솔 입력을 받기 위해서는 Console.ReadLine 을 사용해요.

string input = Console.ReadLine();

다음과 같이 사용하는데 사용자가 입력한 문자열을 문자열로 반환하여 input 변수에 값을 저장해주는 코드입니다.

변수와 자료형

○ var 키워드

C# 3.0부터 사용가능한 변수로 var키워드를 사용하여 변수를 선언하면 변수의 자료형이 컴파일러에 의해 자동으로 결정되는데요.
초기화하는 값의 자료형에 따라 변수의 자료형이 결정되는 것이에요.

예를 들어, 다음과 같이 변수를 선언할 수 있어요.

var num = 10;         // int 자료형으로 결정됨
var name = "kero";   // string 자료형으로 결정됨
var pi = 3.141592;    // double 자료형으로 결정됨

var키워드를 사용하면 변수를 선언할 때에 초기화하는 값의 자료형에 따라 변수의 자료형이 결정되므로, 변수를 선언하는 시점에서 변수의 자료형을 정확히 알 수 없는 경우에 유용하게 사용할 수 있어요.


개인 프로젝트 진행

이번주차 개인프로젝트는 텍스트RPG 게임 만들기예요.
오늘 진행한 부분은 게임시작화면과 플레이어의 상태를 보여주는 화면을 제작했어요.

게임 시작화면

static int StartScene()
{
    Console.WriteLine();
    Console.WriteLine("스파르타 마을에 오신 여러분을 환영합니다.");
    Console.WriteLine("이곳에서 던전으로 들어가기전 활동을 할 수 있습니다.");
    Console.WriteLine();

    Console.WriteLine("1. 상태 보기"); ;
    Console.WriteLine("2. 인벤토리");
    Console.WriteLine("3. 상점");
    Console.WriteLine();

    Console.WriteLine("원하시는 행동을 입력해주세요.");
    Console.Write(">> ");
    int choice = int.Parse(Console.ReadLine());

    return choice;
}

먼저 게임 시작화면을 보여줄 StartScene() 함수를 만들었어요.
유저가 원하는 행동을 입력받아 int형으로 변환한뒤 반환해줍니다.

static void Main(string[] args)
{
    while (true)
    {
        int choice;
        choice = StartScene();

        switch (choice)
        {
            case 1:
                break;
            case 2:
                break;
            case 3:
                break;
            default:
                Console.WriteLine("잘못된 행동입니다.");
                Console.WriteLine();
                break;
        }
    }
}

메인 함수에서 StartScene() 에서 반환 받은 값으로 스위치문으로 조건을 걸어 각각의 창으로 넘어갈 수 있도록 했습니다.
1~3 외의 숫자를 누르게 된다면 "잘못된 행동입니다" 라는 문구를 출력하며 다시 시작창으로 돌아가요.



상태 보기 화면

struct Status
{
    public int level;
    public string nickname;
    public int attack;
    public int defense;
    public int hp;
    public int gold;

    public void ShowStatus()
    {
        Console.WriteLine("LV. " + level);
        Console.WriteLine(nickname);
        Console.WriteLine("공격력 : " + attack);
        Console.WriteLine("방어력 : " + defense);
        Console.WriteLine("체력 : " + hp);
        Console.WriteLine("Gold : " + gold + " G");
    }
}

우선 플레이어의 상태를 저장해줄 구조체를 만들어 주고 정보들을 출력해줄 ShowStatus() 함수를 만들어줬습니다.

저는 플레이어의 닉네임을 유저에게 입력받게 하려고 Login() 함수를 만들어줬어요.

static void Login()
{
    Console.WriteLine("캐릭터를 생성합니다.");
    Console.Write("닉네임을 입력해주세요: ");
    string name = Console.ReadLine();

    status.level = 1;
    status.nickname = name;
    status.attack = 10;
    status.defense = 5;
    status.hp = 100;
    status.gold = 1500;
}

유저에게 닉네임을 받은 후에 플레이어의 상태를 초기화 해줘요.

그리고 상태를 보여줄 StatusScene() 함수를 만들었습니다.

static void StatusScene()
{
    Console.WriteLine("상태 보기");
    Console.WriteLine("캐릭터의 정보가 표시됩니다.");

    status.ShowStatus();

    Console.WriteLine();
    Console.WriteLine("0. 나가기");

    while (true)
    {
        Console.WriteLine();
        Console.WriteLine("원하시는 행동을 입력해주세요.");
        Console.Write(">> ");

        int choice = int.Parse(Console.ReadLine());

        if (choice == 0) break;
        else
        {
            Console.WriteLine("잘못된 행동입니다.");
        }
    }
}

메인 함수에서 반복문이 시작하기 전에 Login() 함수를 호출하고 반복문 안의 스위치문의 상태보기 조건에 StatusScene() 함수를 넣어줍니다.

static void Main(string[] args)
{
    Login();

    while (true)
    {
        int choice;
        choice = StartScene();

        switch (choice)
        {
            case 1:
                StatusScene();
                break;
            case 2:
                break;
            case 3:
                break;
            default:
                Console.WriteLine("잘못된 행동입니다.");
                Console.WriteLine();
                break;
        }
    }
}



마무리

강의를 듣고 이해하고 복습하고 개인 프로젝트까지 진행하려니 시간이 너무 부족한 느낌이네요.
최대한 시간을 짜내서 놓치는 것 없이 한 주를 마무리 할 수 있도록 노력해보겠습니다.

0개의 댓글