TIL

2024/3/19 TIL

jhwoo1221 2024. 3. 19. 21:17

'오늘의 일에서 나는 어떤 것을 배웠는지' - 학습

퀘스트를 만들 때 데이터 구조 및 작동 방식
퀘스트 데이터 시트

1. 어떤 퀘스트 / 어떤 액션이 있을지 정의
 - 퀘스트 ID
 - 퀘스트 이름
 - 퀘스트 설명
 - 퀘스트 타입 (액션의 종류)
 - 타겟 ID (조건을 만족하기 위해 필수로 접촉해야하는 객체가 무엇인지)
 - 카운트 (액션 처리 횟수)
 - 보상 ( 경험치 / AP / 골드 / 다이아 / 아이템 )
 - 보상 카운트
 (보상의 종류 최대치 만큼 보상 / 보상 카운트 반복 )

엑셀 데이터를 퀘스트 데이터 형식으로 바꿔서 퀘스트 DB에 저장

int id
string 이름
string 설명
enum 타입
int target
int 카운트
int exp
int gold
int reward1
int rewardCount2

리워드 클래스 생성
구조 : 리워드 ID / 리워드 카운트

그리고 리워드 리스트를 만들고 접근자에
만약 리워드 ID가 0이 아니라면 리스트에 새 리워드 정보 추가

이제 SO화.

퀘스트Data와 
<퀘스트>를 구분하기

퀘스트
 - 퀘스트 ID
 - 진행도
 - 상태 (수락대기/진행/완료)
 - 메서드 (수락 / 업데이트 / 완료)


퀘스트 매니저
<퀘스트>를 관리함

 - 진행중 퀘스트 목록 (딕셔너리 : int / 퀘스트) 
 - 완료한 퀘스트 목록 (해쉬셋 int )
 - 메서드 isClear(int id) (이미 클리어한 퀘스트인지 체크)

 - 퀘스트 ID를 통해 퀘스트 리스트를 관리
 - 이벤트 온퀘스트콜백 (시작/업데이트/클리어)

 - 구독
 - 비구독

 

...

 

(아직 구조를 다 이해 못했기 때문에, 추가로 복습 및 정리 요약이 필요함)

 

 

Q9. 배열과 List, ArrayList, Dictionary 의 차이점을 설명해주세요.
    1. (꼬리질문) Dictionary는 어떻게 구현해야 하나요? 
    2. (꼬리질문) Dictionary 검색이 빠른 이유는 무엇인가요?

A9. 

배열(Array)
 - 같은 자료형 요소들을 저장하는 자료 구조.
 - 선언 시 크기가 고정됨 / 요소의 추가 및 삭제가 비효율적
 - 메모리 상에 연속적으로 할당 / 인덱스를 통해 빠르게 접근 가능

List
 - 동적 배열(dynamic array) 자료 구조
 - 크기 동적 조절 가능 / 요소의 추가 및 삭제 가능 
 - 인덱스를 통해 요소에 빠르게 접근 가능.

ArrayList
 - 동적 배열 자료 구조 / 내부적으로 배열을 사용하여 요소를 저장
 - 크기 동적으로 조절 가능 / 요소의 추가 및 삭제 가능 
 - 요소의 삽입 및 삭제에 대한 효율이 배열보다 좋고 리스트보다는 안좋음.

Dictionary (해시 테이블, 해시 맵, 연관 배열):
 - 키와 값의 쌍으로 데이터를 저장
 - 키를 사용하여 값을 검색 / 키-값 쌍을 추가하거나 삭제 가능
 - 해시 함수를 사용해서 키를 해싱 / 검색 및 삽입에 빠른 성능을 제공합니다.
 - 키는 중복될 수 없음 / 값은 중복되어도 상관 x

Dictionary 구현 방법 
 - 일반적으로 해시 테이블을 사용.

Dictionary 검색이 빠른 이유
 - 해시 테이블의 사용 덕분. 검색 연산의 시간 복잡도는 일반적으로 O(1)에 가까움. 

'오늘의 나는 무엇을 잘했는지' - 성취
 최종 팀 프로젝트 

 - 아이템 데이터 클래스 및 아이템 타입, 아이템 스크립터블 오브젝트 작성

 - 퀘스트 세션 특강 

'오늘의 나는 어떤 문제를 겪었는지, 앞으로 어떻게 해결할 것인지' - 개선
 - 퀘스트 세션 특강을 듣고 대략적인 구조 파악은 했는데, 구체적인 작동 방식이나 DB 연동하는 방법에 대한 이해가 아직 부족하므로, 코드를 뜯어보면서 분석하고 팀 프로젝트에 응용해볼 수 있도록 해야겠다.