본문 바로가기

내일배움캠프/[P2-Solo.] SpartaDungeon

[TIL 24.04.26] 개인 프로젝트: 스파르타 던전(完)

과제 제출이 끝난 후 우리조에서 서로의 코드를 보며 리뷰를 했다. 이번 글은 그 와중에 배운 내용에 대해 쓴다.

 

목   차

     


    #region

    VS Community에서 범위를 정해 토글을 만들 수 있는 기능이다. 

    비트 플래그(bit flag)

    enum eEquipType {
    	HELMET = 1,
        CHESTARMOR = 2,
        AMULET = 4,
        WEAPON = 8
    }

    위와 같이 enum의 값을 2진수로 표현할 수 있게 2의 제곱수들로 열거를 하는 방식이다. 강동욱 튜터님은 실무자들도 잘 안쓰는 경우가 많기에 주의하라고 하셨다.

    생성자를 받아오는 또 다른 방법

    이건 몰랐다기보단 반쯤 잊고 있는 방법이라 default 매개변수랑 함께 연결해서 설명한다. 

    생성자의 가장 마지막 인자부터 n개의 변수에 (int a = 3) 이런 식으로 쓰는게 매개변수다.

    생성자 뒤에 this:() 이런 식으로 생성자 + @를 해주는 방법도 있다.

    [JsonProperty]

    Attribute 중 하나로, 클래스, 함수 등의 위에 쓰면 private인 것들도 json파일에 저장할 수 있다.

    싱글톤 쓰는 법

    public static DataManager instance;
    string saveLocation = @"./PlayerInfo.json";
    
    DataManager()
    {
        if (instance == null)
            instance = new DataManager();
    }

    아직 이해는 잘 못했지만, 이렇게 쓰면 모든 함수를 static으로 선언해줄 필요가 없어진다고 한다.

    튜터님 피드백에 대한 나의 리뷰

    • 배우신 내용을 다양하게 활용하여 구현하려고 한 점을 높게 삽니다. 이벤트 핸들러, 상속 등의 기능을 다양하게 활용하였습니다.
      • 팀 프로젝트에게 실험적인 기능을 하면 안되겠지만, 개인 프로젝트인 만큼 아직 잘 모르는 기능들을 구현해보고 싶어서 도전했다. 다만 새로운 기능을 배워서 쓰느라 많은 시간이 지체되어 완성도가 떨어지는 점이 아쉬웠다.
    • 다만, 급하게 적용하다보니 제대로 이해가 받침되지 않은 부분이 있습니다. 예를 들어, 던전에서 세이브파일을 로드하는 경우 크래시가 나는 것은 delegate계열은 직렬화대상이 아니기 때문인데, 직렬화가 무엇인지 이해도가 아직 자리잡지는 않은 것 같습니다(조금 난해한 면이 있어서 자연스러운 현상이라고 봅니다.) 또, 인벤토리가 ItemList를 상속받아야 하는 이유는 다소 애매합니다.
      • 이 피드백을 보고 강동욱 튜터님을 찾아가서 직렬화에 대해 가장 기본적인 부분은 배웠다.
      • delegate 계열이 직렬화 대상이 아니라는 것이 내가 설정하지 않아서인지 아니면 원래 불가능한 것인지 뒤늦게 깨달았지만, 이미 내 피드백을 해주신 송지원 튜터님이 퇴근한 후에 알게 되서 아쉬웠다. 후에 가능하면 찾아갈 예정이다.
      • 강동욱 튜터님...은 빛이다. delegate는 함수이기에 직렬화가 안된다. 꼼수를 쓰면 (RPC를 사용하면?) 가능은 하다지만 내가 했을 리가..? 
      • 마지막으로 인벤토리가 ItmeList를 상속받은건 임의로 테스트 하다가 빼지 않은 것이기에 없는게 맞는 코드이다. 아직 클래스 재정비가 이루어지지 않은 상태로 제출한거라 약간 부끄러웠다.
    • Windows 11에서 콘솔창 변경하는 것은 이전 버전과 조금 다른 점이 있어, 이해하신 것처럼 방법을 찾아보셔야 합니다.
      • 이건... 자료가 많이 부족해서 그냥 윈도우+방향키를 통해 수동으로 하기로 했다.
    • 요구사항을 반영하면서, 자신의 게임에 적용해보면서 만족감을 느낀 경험을 하셨다는 것을 느끼게 되는 프로젝트여서 좋은 평가를 하고 싶습니다.
      • 코드가 너무 거지같다고 하면 서운할까봐 넣어주신 멘트일까 생각한다. 나는 개인적으로 차라리 내 코드의 부족한 점 하나를 더 지적해주시는게 좋을 것 같다는 생각을 했다.
    • 깃이그노어의 설정을 잘못하셔서 지금 모든 파일이 올라가있습니다. 확인부탁드려요.
      • 체크 완료! 급하게 올리느라 깜빡하고 빼먹었다.

    +튜터님이 설명해주시는 Dictionary와 List의 차이

    Dictionary<int, [다른 객체]> 를 사용할 때와 List<[다른 객체]> 의 차이를 아주 깔끔하게 설명해주셨다. 

    = if문과 switch문의 차이.