2024. 4. 26. 20:22ㆍ나의 개발자 기록/본 캠프 개발 일지
2024년 4월 26일 금요일
과제 해설 영상과 시작하기 전 설계에 대한 팁
어제 6시에 과제 제출이 끝나고, 얼마 안 있다가 과제 해설 영상이 올라왔습니다. 미처 제출을 못 한 사람이나 좀 더 수정 보완을 하고 싶은 사람은 해설 영상을 보고 재제출을 해도 된다고 공지가 올라와서 오늘 아침 일찍부터 강의를 보면서 따라 실습하고, 제가 부족했던 부분은 무엇이었는지 확인하는 것과 튜터님께서는 어떤 방식으로 해결하시고 어떠한 순서로 과제를 풀어 나가셨는지에 대해서 생각해 봤습니다.
일단 저는 이렇게 요구 사항이 많았을 때, 뭐부터 시작하고, 설계해야 될지 감이 안 잡혔기 때문에 제일 첫 요구 사항을 만족하기 위해서 메인 화면 창을 만들었는데요. 튜터님께서는 시작하기에 앞서서 어떻게 만들지 설계를 하고 진행하셨습니다.
간단한 기본 설계
- 간단하게 노트에 그림으로 그리거나 그림판으로 어떻게 구상해서 그린 지 화면 구상에 대한 정리
- 스파르타 던전 TextRPG의 경우 필수 요구 사항을 토대로 총 6가지의 화면 구상이 필요
1. 오프닝 화면 > 상태 확인
상태 확인은 능력치를 보여주는 부분 1단계, 능력치를 반영받는 부분 2단계로 나눠서 설계
2. 오프닝 화면 > 인벤토리 > 장착 관리
인벤토리는 난이도가 ↑, Item을 Class로 만들고, Character(Player)도 Class로 만듦, 유용한 함수를 만들어서 저장
3. 오프닝 화면 > 상점 > 구입
인벤토리를 약간 복붙하고 추가적으로 만드는 느낌, 구입하는 과정도 구현
위의 사항들을 바탕으로 파일을 총 4가지 클래스로 구분해서 관리하면 좋다고 하셨습니다.
(1) GameManager Class : 게임의 상태 흐름을 관리
(2) Item Class : 아이템의 리스트를 들고 관리, 하나의 Item을 각각의 개별 변수로 저장하는 것보다 클래스로 저장 → 훨씬 편리하고 실수가 적어짐
(3) Character(Player) Class : 플레이어 캐릭터의 정보도 클래스로 저장
(4) Console Utility Class : 콘솔과 관련된 복잡한 거 관리
무분별한 static을 막는 법
- 프로그램의 시작점인 main함수가 static으로 정의되어 있어서, Program 클래스에서 정의되는 함수들이 우수수 static으로 정의되기 마련 (static에서는 static이 아닌 변수, 메서드 접근 불가)
튜터님이 쓰신 전략
- Program에서 GameManager를 생성 → GameManager가 로직을 수행
static이란?
- 클래스의 각각의 인스턴스(개별 객체)에 속해있지 않고, 클래스 그 자체에 속해있는 변수 (학생의 수 NumStudent를 Student클래스에 저장할 때 각각의 학생이 저장하는 게 아니고, Student 클래스 자체가 NumStudent를 저장하는 것)
과제를 하면서 내가 막혔던 부분
설계가 다 끝나고, 튜터님께서 TextRPG 구현을 시작하셨습니다. 글을 쓰면서 강의 내용을 모두 담고 싶지만, 그러면 TIL이 너무 길어지기도 하고, 여러 가지 문제가 있을 수 있어서 강의에 대한 자세한 분석과 TextRPG 스파르타 던전 과제에 대한 전반적인 내용은 제가 따로 공부하면서 풀어볼까 합니다. 지금은 일단 제가 막혔었던 부분인 들어가고 나가는 부분에 대해서 서술할까 합니다.
string input = Console.ReadLine();
switch (input)
{
case "1":
ShowStatus(player);
do
{
Exit();
} while (trigger == false);
break;
case "2":
ShowInventory(player);
do
{
Exit();
} while (trigger == false);
break;
case "3":
VisitStore(player);
do
{
Exit();
} while (trigger == false);
break;
default:
Console.WriteLine("잘못된 입력입니다.");
Task.Delay(800).Wait();
trigger = true;
break;
}
static void Exit()
{
string userInput = Console.ReadLine();
if (userInput == "0")
{
trigger = true;
}
else
{
Console.WriteLine("잘못된 입력입니다.");
Console.Write(">> ");
trigger = false;
}
}
제가 기존에 쓰던 들어가고 나가는 거에 관련된 함수와 코드들입니다. 제가 가지고 있던 문제점은 스테이터스 창에서 나가는 거에는 문제가 없는데, 상점이나 인벤토리에서 나갈 때 2번 입력을 받아야 나가지는 문제가 있었습니다. 거기서 왜 이러한 문제가 생겼는지 생각해 보니까, 기존의 상점과 인벤토리 창에서 또 다른 창으로 가는 Switch case 조건문이 들어가고, input으로 ReadLine 함수를 받아 왔을 때 Exit 함수에도 input ReadLine이 들어 있었기 때문에 두 번 받는 상황이 생기는 거였습니다. 이 문제 때문에 혼자 끙끙 앓다가 튜터님께서도 힌트를 알려주셨는데도 불구하고 과제 제출할 때까지 해결을 하지 못했었죠...
public static int PromptMenuChoice(int min, int max)
{
while (true)
{
Console.Write("원하시는 번호를 입력해주세요: ");
if (int.TryParse(Console.ReadLine(), out int choice) && choice >= min && choice <= max)
{
return choice;
}
Console.WriteLine("잘못된 입력입니다. 다시 시도해주세요");
}
}
그런데 오늘 아침에 강의를 보면서 깨달은 사실은 반복적으로 나오는 부분은 따로 빼서 함수로 만드는 것과 입력받는 부분과 While 반복문, 그리고 매개 변수를 통해서 해결을 하셨습니다. 예를 들어서 위의 함수를 사용할 때 소괄호 안에 있는 매개변수를 스위치 조건문의 케이스 부분과 동일하게 주어지게 한다면 choice 변수에 입력받은 ReadLine 값들이 최솟값과 최댓값 사이에서만 해당이 되기 때문에 제가 위에서 겪었던 시간이 많이 걸린 문제를 바로 해결할 수 있었던 점이 굉장히 좋았습니다.
과제에 대한 피드백과 지금까지 해보면서 느낀 점들
강의를 다 보고 나서 점심을 먹고, 오후에는 제가 문제가 됐던 부분만 수정하여 재제출을 했습니다. 너무 많이 수정하게 되면 피드백받는 의미가 없어지기 때문에 조금만 수정을 했습니다. 그러고 나서 튜터님께서 저를 호출하셔서 가봤더니, 과제에 대한 피드백을 진행한다고 하셔서 바로 들어봤습니다.
튜터님께서는 일단 개발 경험이 있었는지 물어보셨고, 저는 대학교 때 배웠던 html과 css에 대해서 이야기를 해드렸습니다. 그러다 보니 무슨 게임을 하는지에 대해서와 어쩌다가 여기에 합류하게 되었는지 등등 여러 가지 다양한 이야기를 했습니다. 그리고 본론으로 돌아와서 지금 과제 상황이 어떻게 진행되었는지 물어보셨고, 저는 화면 공유를 통해서 어떤 식으로 구현되어 있는지 보여드렸습니다. 튜터님께서는 생각보다 많이 구현하셨다고 칭찬해 주셨고, 문제가 여럿 있는 건 당연하다고 하셨습니다. AI의 힘을 빌린 것도 이해하고 활용할 수 있다면 크게 문제가 되지 않는다고도 해주셨고, 제가 과제를 진행하면서 어려웠던 점들에 대한 답을 해주셨습니다.
예를 들어 과제에 대한 진행을 어떻게 해야 하는지와 코딩 공부에 관한 대답이라든지 저에게 있어서 도움이 많이 되는 답변을 정말 많이 해주셨습니다. 그리고 저는 공부를 하는 데 있어서 코드를 따라 실습만 하고 개인 시간으로 따로 반복적으로 쳐보진 않았었는데, 튜터님께서 혼자서 실습해 보고, 계속 보면서 했다면 안 보고도 쳐보고 반복적으로 코드를 쳐봐야 익숙해지고 활용할 수 있다고 하신 점들 덕분에 많은 깨달음을 얻었습니다. 솔직히 과제를 진행하면서 강의도 보고, 밤도 새보고 했는데, 너무 방대한 양을 한번 본 것 만으로 쓰려고 하니까 안된 부분도 있었고, "다른 사람들은 다들 혼자서 잘하시는데, 나는 왜 이렇게 잘 안될까"라는 생각도 했었습니다. 하지만 지금은 사람마다 자기 페이스가 있고, 실력적으로 다르기도 하고, 어떠한 문제가 나를 막고 있다는 건 성장할 수 있는 여지와 성장의 체감이 다르다는 걸 의미한다고 생각합니다. 따라서 이제 주말에도 너무 놀지 말고, 안 하는 것보다 조금이라도 더욱 코딩에 대해서 공부하려고 합니다!
'나의 개발자 기록 > 본 캠프 개발 일지' 카테고리의 다른 글
2024년 4월 30일 화요일 개발일지 / 팀 프로젝트 진행 상황과 클래스, 객체에 대해서 (0) | 2024.04.30 |
---|---|
2024년 4월 29일 월요일 개발일지 / 팀 프로젝트 과제와 GitHub 협업에 대해서 (1) | 2024.04.29 |
2024년 4월 25일 목요일 개발일지 / 이번 과제에 대한 생각 (1) | 2024.04.25 |
2024년 4월 24일 수요일 개발일지 / 연산자에 대해서 (0) | 2024.04.24 |
2024년 4월 23일 화요일 개발일지 / 메소드와 매개변수, 그리고 TIL 쓰는 법에 대해서 (0) | 2024.04.23 |