본문 바로가기

TIL

[TIL]2024-1-10 / 13일차 - 팀 과제 : 팀원들 도우기 / 코드 다듬기

 

우리 조는 아깝게도 5명 전원 이전 코딩 경험이 없는 (혹은 매우 적은) 일명 노베이스(No base) 조 이다.

그래서 모델로 정했던 팀장의 코드에도 여러모로 다듬어야 될 문제가 많았다.

 

내가 구현했던 방법들과 아주 큰 차이가 많았다. 대부분 개인 과제에서 요구 되었던 기본 기능까지만 화면 띄우는 것 이상의 확장성이 적었던 것이다. 그렇기 때문에 코드를 파악하고 기능 추가를 위해 변형하는 과정에서 시간이 너무 오래 걸리고 있다. 거기에 더해 팀원들을 돕는 것 때문에 오늘은 생각한 것 보다 작업 진행이 안되었다.

 

그래서 내가 도운 점, 하다가 발견한 문제 몇 개를 해결한 것을 위주로 적으려 한다.

 

 

우선 조원들 다 깃허브를 다룰 줄 몰랐다. 대부분 이전 조에서는 경험자들이 세팅해줬었던 것으로 보인다.

그래서 깃허브 설명을 해준 뒤 레포지토리 설정과 본인들의 깃허브 데스크탑으로 연결하는 법,

브렌치를 만들고 컨벤션을 정해 작업하는 법에 대해 설명해주어야 했다.

 

복잡한 컨벤션은 어렵기 때문에 기본적인 규칙들만 설정하였고

 

커밋 컨벤션은 고마운 글을 참고하여 알려주었고 : 참고 글

 

브랜치 컨벤션

메인 브랜치는 직접적으로 건들지 말고

보조 브랜치 :

feature : develop 브랜치에 새로 추가할 기능을 개발하는 브랜치

hotfix : 메인 브랜치에서 발생한 버그를 수정하는 브랜치 정도로 정했지만 실제로 진행하는 데는 다들 경험이 적어

자신이 맞은 기능별로 분류해서 feature로 나누어 작업하는 정도로 진행했다.

 

코딩 규칙 C#

1.메소드, 클래스 이름은 대문자로 ( (get; set;) 사용 때 편의성)

2.메소드 안에 변수 선언은 소문자로

3.이외 명칭은 소문자로 시작하되 띄어쓰기 대신 대문자로 구분

 

 

1. 선택지 선택법과 int.Parse 문제

 

기존 선택지 선택 방법에 경우 아래와 같이 Console.ReadLine()int.Parse로 받는 방식이었고 do while문 이었다.

그런데 여러 탭을 오가는 코드를 짜게 되며 문제가 발생한 것과 int.Parse다 보니 숫자 이외에 입력이 들어가게 되면 오류가 났다.

 

기존 코드는 전반적으로 다음과 같다

 int acton = int.Parse(Console.ReadLine());
            bool isMain = true;
            do
            {
                isMain = false;
                if (acton == 0)
                {
                    Start();
                }
                else
                {
                    Console.WriteLine("잘못된 입력입니다.");
                    acton = int.Parse(Console.ReadLine());
                    isMain = true;
                }
            } while (isMain);
        }

 

그래서 예전에 내 문제를 해결했던 대로 TryParse로 인풋을 체크하는 메서드를 만들어 잘못된 입력 체크까지 같이 하는 메서드를 만들고 while(true) 방식으로 바꾸어 bool isMain을 지속적으로 체크할 필요 없도록 코드를 다듬었다.

 

또한 지속적으로 중첩되던 안내문을 wrongInputRemover라는 함수를 만들어 빈칸으로 안내문을 덮어 씌우도록 하여 꼼수와 같지만 해결했다.

 

public static int CheckInput(int min, int max) 
{
    static void WrongInput()
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("잘못된 입력입니다!");
        Console.ResetColor();
    }
    var top = Console.CursorTop;

    while (true)
    {
        wrongInputRemover(top);
        var inputParse = -1;
        if (!int.TryParse(Console.ReadLine(), out inputParse)) //TryParse를 이용해 해결하는 방법으로 변환
            inputParse = -1;
        if (inputParse >= min && inputParse <= max)
            return inputParse;
        else
            WrongInput();
    }
    static void wrongInputRemover(int top)
    {
        Console.SetCursorPosition(0, top);
        Console.WriteLine("                                     ");
        Console.SetCursorPosition(0, top);
    }
}

 

그렇게 추가하게 된 메서드

int acton = CheckInput(1, 3);
while(true)
{
    if (acton == 1)
    {
        State();
        break;
    }
    else if (acton == 2)
    {
        Inventory();
        break;
    }
    else if (acton == 3)
    {
        Shop();
        break;
    }
}

 

선택지 선택문은 다음과 같은 형식으로 변경되었다. 매번 잘못된 입력을 띄울 필요 없어져서 깔끔해졌다.

 

 

또한 구매나 장비 관리에서 기존 코드가 아이템 갯수만큼 action을 만들어 놓은 방법은 비효율 적이기에 

action에 아이템 리스트 카운트를 세는 것으로 바꾸었다.

 

 

 

아래처럼 바꾸었다.

 

 

이외에도 추가 기능 구현을 위해 계속해서 여러 부분을 건들여 보고 있지만

내가 쓴 코드가 아니란 것이 이렇게 작업하기 힘든 환경이란 것에 어려움을 느끼고 있다.

 

팀 내에 이런 문제를 쉽게 정립하거나 방향성을 정해줄 실력자가 없는 것이 구심점을 이루지 못하고 있어 어려움이 많다.

어쩌다보니 저번 팀 과제에서는 여러모로 도움 받으며 진행했던 내가 지금은 조원들에게 가르쳐주며 해야하는 것이

내가 성장했다는 것이라고 느끼게 하면서도 걱정을 느끼고 있다.

 

내일은 상점 판매 기능

캐릭터 스테이터스 창 추가 기능 구현 중 하나라도 완성시켜야 할 것 같다.