TIL에 3일간 퀘스트 클래스와 관련한 얘기만 적어서 이 클래스만 작업한 것처럼 보이지만.. 인벤토리 수정과 플레이어, 아이템 리스트를 json으로 save/load 작업을 진행했어서 이 퀘스트 클래스도 금방 할 것 같았지만 막상 json으로 넣으려고 생각해보니, 인터페이스 리스트로 퀘스트의 전체 목록을 갖고는 있지만 얘들을 그대로 넣기에는 json 형식을 통일할 수가 없을 것이라는 예상을 했고, 이는 그대로 들어맞았다.
그래서 찾은 방법이 각 quest들을 동일한 클래스로 변환하고, 이를 json으로 저장하는 것이다. 처음에는 인터페이스를 자동으로 변환해주는 함수를 찾아서 검색을 했으나 사용이 복잡하다고도 하고 각 클래스가 노출될 수 있다는 위험성이 있다 보니 앞선 방식을 구현하게 되었고, 이 방식이 DTO라는 방식이라고 한다.
DTO - Data Transfer Object의 약자로 의미 그대로 데이터를 전달하는 클래스가 되겠다.
공통된 클래스로 변환하여 저장하고(직렬화), 저장 시의 타입에 따라 불러올 때(역직렬화) 대응되는 클래스로 돌려놓는 것
이렇게 하면 클래스가 노출될 일도 없고, 클래스가 추가되어도 이 오브젝트에 추가되는 변수만 작성해주면 외부 파일로 컬렉션이나 데이를 관리할 수 있게 된다.
===여기서 발생한 에러===
System.InvalidOperationException 이라는 에러가 나왔는데 직렬화할 클래스의 멤버 중 json 데이터에 대응 가능한 멤버가 없을 경우 나오는 에러이다.
get, set이나 접근자가 제대로 지정되어 있는지 확인해볼 필요가 있다.
그 외에는 생성자 오버라이딩으로 여러 생성자가 있을 경우, 다른 생성자를 호출하고자 할 경우에
public CLASSNAME():this() 와 같은 식으로 다른 생성자를 호출할 수 있다.(정의부에서만 가능하고, 본문에서는 호출 불가)
'[내일배움캠프 Unity 9기]' 카테고리의 다른 글
| 04/25 복습내용 (0) | 2025.04.25 |
|---|---|
| 04/24 캠프 배치고사 및 복습 내용 (0) | 2025.04.24 |
| 04/22 TIL (0) | 2025.04.22 |
| 04/21 TIL 클래스 인터페이스, 이벤트 방식 고민 (0) | 2025.04.21 |
| 04/18 개인 프로젝트 과제 마무리 (0) | 2025.04.18 |