[TIL] 15일차 - 예상치 못한 오류

김유원·2024년 1월 12일
0

📝24.01.12

한 주가 빠르게 지나갔다. 눈코뜰새 없이 지나가는 느낌이다. 문제가 발생하고 이를 해결하고 시간을 보면 순식간에 1시간씩 사라져있고, 이걸 12번 반복하면 9시가 된다.

하루를 나름 만족스럽게 보낸 날은 벨로그를 적으면서 하루를 회상하는 시간이 가장 보람찬 시간인 것 같다. 반대로 조금 부족하다 느낀 날은 글을 적으면서도 쓸게 없어 우울해진다. 이 시간을 즐겁게 보내기 위해서라도 매일 충분히 노력하고자 한다.

오늘 내가 한 것은 이제껏 한 스킬 작업을 던전 배틀 시스템에 적용하는 것이었다.
그저 옮겨적기만 하면 그대로 구동될 줄 알았는데, 다른 팀원이 작업한 부분과 여럿 충돌하는 부분이 있어 이를 해결하는 데 한 나절이 걸렸다.

나는 초기에 Character 클래스에 가상 메서드로 스킬들을 만들고, 자식 클래스들에 오버라이드를 통해 스킬 메서드를 구현했다.

참고로 Monster와 던전 작업을 하는 팀원들의 요구에 의해 Character 클래스를 Player 클래스로 바꾸고, Character 클래스라는 상위의 부모 클래스를 새로 만들게 되었다. 사실 이건 아무 문제가 없다. 단순히 Character 클래스로 만든 플레이어 객체를 Player 클래스로 바꾸어주기만 하면 되었기 때문이다.

예상치 못한 함수 실행 실패

주요한 이슈는 바로 저장 파일을 로드할 때 생긴 것이다. 우리는 json 파일을 deserialize하여 저장 파일을 불러온다.

player = JsonConvert.DeserializeObject<Player>(json, settings);

하지만 이 경우대로 실행하면 저장 파일의 Player 클래스가 원래 무슨 자식 클래스였든, Player 클래스로 불려오게 된다.

이런 경우 당연히 가상 메서드가 자식 클래스의 메서드를 찾지 않고, 이제껏 구현한 스킬들은 모두 초회차에만 사용하게 되는 것이다.

그래서 이를 해결하기 위한 임시 해결책을 강구했다.

Player save = JsonConvert.DeserializeObject<Player>(json, settings);

if (save.job == "전사")
{
    player = JsonConvert.DeserializeObject<Warrior>(json, settings);
} else if(save.job == "궁수")
{
    player = JsonConvert.DeserializeObject<Archer>(json, settings);
}
else
{
    player = JsonConvert.DeserializeObject<Mage>(json, settings);
}

즉 한번 파일을 불러와 직업을 분별하고, 이를 활용해 다시 자식 클래스들로 불러오는 것이다.
물론, 이 방법이 좋은 방법 같지는 않다. 하지만 이것 외의 좋은 방법이 생각나지 않아 일단은 이런 방향으로 수정하게 되었다.




물론 이 외에도 수많은 버그 픽스와 재구현, 그리고 팀원의 구현 함수를 활용한 방향으로의 수정 등 다양한 commit을 했다. 하지만 오늘 가장 인상 깊었던 오류가 이것이라 작성해둔다. 다음에도 이와 비슷한 오류가 자주 일어날 것 같기 때문이다. 이를 해결하기 위한 더 좋은 방안을 생각해두어야 할 것 같다.


오늘의 문제 풀이

📕 [프로그래머스] 자릿수 더하기

profile
개발 공부 블로그

0개의 댓글

관련 채용 정보