2024년 5월 02일 목요일 개발일지 / 팀 프로젝트 진행 상황과 C# 배치고사

2024. 5. 2. 21:21나의 개발자 기록/본 캠프 개발 일지

2024년 5월 02일 목요일


팀 프로젝트 진행 상황에 대해서

 

 

오늘도 9시부터 30분은 자기 개발이나 준비하는 시간을 가졌고, 9시 30분부터 팀 프로젝트에 대한 회의를 진행했습니다. 이번에는 잘하시는 분이 과제 요구사항에 대한 대부분의 개발을 해보고, 나머지 3명은 각자 한번씩 해보고 싶은 걸 구현해 보고, 구현이 잘 안 되었을 때 잘하시는 분이 힌트와 어떤 원리로 작동하는지 알려주는 방향으로 잡게 되었습니다.

 

public void PlayerNameSet(Player player)
{
    Console.WriteLine(Description);
    string playerName = Console.ReadLine();
    player.Name = playerName;
}

public static void StartMenu()
{
    Menu mainMenu = new Menu();
    Player player = new Player();

    mainMenu.SetDesc("스파르타 RPG에 오신 여러분 환영합니다.\n원하시는 이름을 설정해주세요.");
    mainMenu.PlayerNameSet(player);

    MainMenu();
}

 

제가 구현해본 역할은 플레이어 캐릭터 이름을 입력받은 값으로 정하는 역할이었습니다. 위의 코드는 제가 생각해서 만든 코드인데 "왜 적용이 안될까" 하다가, 생각을 해보니까 데이터 베이스에 객체가 이미 생성이 되어 있었기 때문에 메뉴에서 객체를 만들 필요가 없었습니다.

 

 

그래서 이름을 설정하는 함수는 데이터 베이스에 넣어두고, 플레이어 클래스에 플레이어의 이름을 받을 수 있는 SetName이라는 함수를 만들었습니다.

 

public static void SetPlayerName()
{
    string playerName = Console.ReadLine();
    _player.SetName(playerName);
}

 

그렇게 데이터 베이스 클래스에 위의 함수를 추가하니 객체를 따로 건드리지 않아도 정상작동을 하게 되었고, 잘하시는 분께 보여드렸더니...

 

// Player Class
public void SetName()
{
    Name = Console.ReadLine();
}

// 데이터 매니저 클래스에는 싱글톤이 되어 있었다 !!
// 그래서 따로 만들 필요가 없었다... 충격
// Menu Class

public void StartMenuDesc()
{
    Console.WriteLine(Title);
    Console.Write(Description);
}

public static void StartMenu()
{
    Menu mainMenu = new Menu();

    mainMenu.SetTitle("\n스파르타 RPG에 오신 여러분 환영합니다.\n원하시는 이름을 설정해주세요.");
    mainMenu.SetDesc("\n이름을 입력해주세요 : ");
    mainMenu.StartMenuDesc();
    DataManager.Instance._player.SetName();

    MainMenu();
}

 

SetName에 바로 ReadLine을 받아버리고, 데이터 베이스 매니저가 싱글톤화 되어 있으니 메뉴에서 그냥 불러주기만 하면 되는 것이었습니다. 그리고 데이터 매니저에 static이 난무했었는데, 그것도 해결하시고, 프로그램에 있었던 데이터 매니저 객체 생성도 할 필요가 없었습니다. 그것도 바로 수정하고 나니 코드가 가독성도 좋아지고, 한결 깔끔진 느낌을 받았습니다. 그다음, 바로 dev 브런치에다가 PR을 진행했고, 노션에도 정리했습니다.


C# 배치고사에 대해서

 

4시부터는 C# 배치고사를 봤는데, 생각한 것보다 어렵지 않으면서도 어려운? 느낌이 들었습니다. 7번 문제까지 풀었는데, 8번 문제부터 모르는 문제가 나와서 생각 좀 하다가 포기했습니다. 1번 문제는 배열의 합산에 대한 문제였고, 2번 문제는 매개변수에 대한 내용이었는데, 제가 했던 답이 맞는지 많이 헷갈렸습니다. 3번 문제 같은 경우에는 주어진 코드가 왜 오류가 나는지 설명하는 문제였고, 4번 문제는 증감 연산에 대한 설명을 하는 것이었습니다. 5번 문제는 주어진 코드에서 홀수인지 짝수인지 구분해 주는 프로그램 만드는 것과 6번 문제는 주어진 배열을 정렬하는 방법을 서술하는 것, 7번 문제는 클래스의 상속 개념인 버추얼과 오버라이드에 대한 내용이 나왔습니다. 8번 문제부터는 모르는 문제였고, 10번 문제는 자유롭게 배열을 입력받아 오름차순 배열로 정렬해 주는 문제였는데, 6번 문제랑 결이 비슷하다고 생각해 버려서 간단하게 적어버렸습니다.


오후의 진행 상황

 

오후에는 심화 팀 과제에서 추가 구현할 내용들을 정리하면서 어떤 식으로 만들지에 대한 회의를 했습니다. 저는 처음에 직업 선택 기능을 만들어 보려 했는데, 이걸 만들기 위해서는 직업별로 스탯을 나눠야 하니까, 스탯 클래스를 따로 만들어서 스탯이 들어가는 플레이어나 아이템 등등에 적용시켜야 하는 큰 문제가 있었습니다. 그리고 추가로 던전 보상에 관한 시스템이라든지, 퀘스트 기능이라든지 등등 다양한 문제에 대한 내용을 3개로 정리하여 역할을 분담했습니다.

 

역할을 분담하고 나니 저는 상점과 인벤토리의 시스템을 개편해 주는 일을 맡았습니다. groupBy를 사용하여 리스트를 그룹 및 개수를 세서 판매 형태를 재고 형태와 무제한 두 가지로 구분하는 것과 판매할 때 중복 아이템 개수를 형태로 보이도록 하는 작업이 필요한데, 막상 작업에 들어가니 길이 보이지 않았습니다. 원래는 오늘 내로 구현을 다 해보려고 했지만, 생각보다 너무 어려웠기 때문에 오늘 내로 작업을 다 마무리하지 못했습니다. 그래서 내일 groupBy를 제대로 한 번 써보고, groupBy에 대한 개념을 정리해보려고 합니다.