2024년 5월 01일 수요일 개발일지 / 팀 프로젝트 코드 컨벤션 정리와 심화 팀 과제

2024. 5. 1. 20:25나의 개발자 기록/본 캠프 개발 일지

2024년 5월 01일 수요일


팀 프로젝트 코드 컨벤션 정리

 

 

오늘은 아침부터 30분간 각자 개인 공부나 코딩 테스트 등등 자기 개발 시간을 가졌고, 30분부터는 훈련기관에 참여하고 있는 청년들을 대상으로 하는 지원금 신청을 하는 시간을 가졌으며, 그다음에는 저희가 지금까지 작업했던 코드들을 보면서 이해도 하고 코드 컨벤션을 정리하는 시간을 가졌습니다. C#을 잘 다루시는 분 한분이 대표로 하나하나 보면서 구글 코드 컨벤션을 기준으로 저희가 작성했던 코드의 몇 가지를 수정하시고, 한번 더 재차 확인 후 마무리 했습니다.

 

 

그러고 나서 저희가 담당했던 내용들이 달랐던 것도 있고, 저랑 다른 한 분이 메뉴에 대해서 헷갈린 부분이 있었기 때문에, 메뉴를 담당하셨던 한 분이 설명하고 어떤 식의 원리로 작동하는 지 알려주셨습니다. 그리고 잘하시는 분이 다시 한번 디버깅을 통해서 현재 메뉴가 어떤 식으로 작동하시는지 설명해 주셨습니다. 이렇게 회의하는 것과 전체적으로 다시 보는 것 덕분에 휴식하기 오류라든지 판매하기 기능 오류등을 고치면서 진행할 수 있었고, 팀 프로젝트를 하는 데 있어서 하나하나 다시 짚어보는 것 덕분에 코드에 대해 전부 이해한 것은 아니지만 어느 정도는 이해할 수 있었던 시간이었습니다.

 

 

그 다음, 남은 시간에는 팀 프로젝트 심화 과제 부분을 진행하기에 앞서서 어떤 방식으로 만들면 좋을지, 어떻게 구현하면 좋을지에 대해서 회의를 진행했습니다. 회의를 진행하면서 챗 GPT한테 어떤 방법이 더 좋은 지도 물어보고, 장단점도 비교해 보면서 저희는 인터페이스를 활용해서 각각의 몬스터 클래스를 만드는 방향으로 정하게 됐습니다.


오후에 진행했던 것들
internal interface IMonster
{
    public string Name { get; set; }
    public int Level { get; set; }
    public int Hp { get; set; }
    public int Atk { get; set; }
    public int Damage { get; set; }

    public bool IsDead { get; set; }

    public void Attack();

    public void Hit();

    public void Dead();

}

 

오후에는 앞서 이야기 했던 클래스를 각자 만들어보는 것을 목표로 만들기 시작했습니다. 저는 일단 IMonster라는 인터페이스를 만들고, 몬스터한테 필요한 요소들을 만들었습니다.

 

internal class BaseMonster : IMonster
{
    public string Name { get; set; }
    public int Level { get; set; }
    public int Hp { get; set; }
    public int Atk { get; set; }
    public int Damage { get; set; }

    public bool IsDead { get; set; }

    public virtual void Attack()
    {
        Console.WriteLine($"{Name} 몬스터가 공격했습니다.");
    }

    public virtual void Hit()
    {
        Console.WriteLine($"{Name} 몬스터가 공격받았습니다.");
    }

    public virtual void Dead()
    {
        IsDead = true;
        Console.WriteLine($"{Name} 몬스터가 죽었습니다.");
    }
}

 

그 다음에는 BaseMonster라는 클래스를 만들어서 인터페이스의 내용을 받아 오고, 각각의 행동에 대한 디폴트값을 넣어놨습니다. 메서드의 경우에는 각각의 몬스터의 공격이나 죽음 등의 행동이 다를 수 있기 때문에 각각의 행동을 위해서 virtual로 만들었습니다.

 

internal class Minion : BaseMonster
{
    public Minion()
    {
        Name = "미니언";
        Level = 2;
        Hp = 15;
        Atk = 5;
        IsDead = false;
    }

    public override void Attack()
    {
        base.Attack();
    }

    public override void Hit()
    {
        base.Hit();
    }

    public override void Dead()
    {
        base.Dead();
    }
}

 

그러고 나서 과제 요구 사항에 있던 미니언, 대포 미니언, 공허충에 대한 클래스를 만들어서 생성자를 통해 기본값을 만들어 놨습니다. 일단 이번 클래스의 기본적인 구조를 만드는 것이기 때문에 다른 행동이나 플레이어와의 전투 관련한 함수 등등은 만들지 않았습니다.

 

public string GetMonsterInfo()
{
    StringBuilder sb = new StringBuilder();
    if (IsDead == true)
    {
        sb.AppendLine($"Lv.{Level} {Name}\tDead");
    }
    else
    {
        sb.AppendLine($"Lv.{Level} {Name}\tHP {Hp}");
    }
    return sb.ToString();
}

public string GetMonsterBattleInfo(Player player)
{
    StringBuilder sb = new StringBuilder();
    sb.AppendLine($"Lv.{Level} {Name} 의 공격!");
    sb.AppendLine($"{player.Name} 을(를) 맞췄습니다.\t[데미지 : {Damage}]");
    sb.AppendLine($"\nLv.{player.Level} {player.Name}");
    sb.AppendLine($"HP {player.Hp} -> {player.Hp - Damage}");
    return sb.ToString();
}

 

그리고 BaseMonster에서 Menu로 전달해 줄 수 있는 정보를 함수로 만들었고, 지금까지 했던 내용들을 팀 노션 페이지에 정리했습니다. 일단 구조만 만들면 되는 작업이었기에 크게 어려운 점은 없었습니다. 다만 이후에 만들어야 할 배틀 시스템이 던전이나 메뉴를 수정해야 할 것이 많은 것 등 여러 가지로 문제가 많았습니다. 또한 인터페이스와 추상 클래스로 받아 온 만큼 각각의 몬스터의 행동에 차별화를 둬야 하는데, 텍스트 RPG 특성상 한계가 있는 문제도 있었습니다.

 

 

저녁을 먹은 뒤에는 지금까지 했던 내용들을 PR하고, 다 같이 정리를 하면서 어떤 식으로 해결할지에 대해서 이야기를 나누었습니다. 일단은 하나하나 짚으면서 진행했고, 잘하시는 분이 몬스터가 추가 됨에 따라 던전 시스템 재구성과 배틀 시스템을 추가하셨습니다. 그리고 원래 Player 턴과 Enemy 턴이 나뉘어 있었는데 인터페이스를 활용해서 합치는 작업을 보여주셨습니다. 완성된 코드는 아니였지만 배울점이 많은 코드이기 때문에 따로 저희들이 볼 수 있게 끔 나눠서 커밋해주셨습니다. 회의가 다 끝나고 나서는 각자 TIL을 쓰면서 오늘 하루를 마무리했습니다.


앞으로 해야하는 것들

 

 

팀 프로젝트를 진행하면서 다른 분들이 쓰신 코드도 어느 정도 이해는 되지만, 이 코드가 어떤 식으로 작동하는지에 대한 이해만 했을 뿐이고, 정작 아무것도 없는 상태에서 코드를 쓰라고 하면 아직도 힘든 부분이 없지 않아 있습니다. 그래서 오늘도 본 캠프 시간이 끝난 9시 이후에 개인 공부를 좀 더 해야 하지 않을까 싶습니다. 1주 차 내용부터 5주 차 내용까지 많은 양의 지식이 있고, 이것을 단시간에 모두 익히고 활용하기에는 시간이 많이 부족하기 때문에 한시라도 빨리 코드에 좀 더 익숙해지게 끔 연습을 자주 하도록 노력하겠습니다!