241125 TIL - oreno turn wk3 (1)

LIHA·2024년 11월 26일
0

내일배움캠프

목록 보기
118/136
post-thumbnail

뼈대잡기

오늘 할일

  • 만기적금, 복권당첨 로직 손보기 (Map객체 못 쓰기 때문에 배열로 써야함)
    -> 이게 의외로 Map을 쓸 수 있다는 튜터님 말씀을 들었다! 다시 Map으로 바꿔보는 것도 좋겠다.

오늘 한일

  • characterData의 handCards 변수 Map 객체로 재수정
  • 만기적금, 복권당첨 로직 Map 객체 기반 메서드로 수정완료
  • userCardHandler에서 사용카드 손패에서 지우는 로직 Map 객체 기반 메서드로 수정완료

repeated 타입은 배열, 리스트만 가능한데 - handCards를 Map과 배열 중 뭘로 다룰까?

내 생각

그래서 handCards를 Map객체로 쓰고싶으면 변환과정을 거치고, 아니라면 이차원배열로 써야할 것.
서버에서 이런 데이터를 다룰 때는 Map객체가 가장 좋긴 하다. 전송 시에만 변환해주면 되니까.

깨달은 것

  • Map이 아니고 이차원배열을 쓸거라면... -> 아니다. 이거 이차원배열로 나오지 않는다.
  • cardData 타입이 애초에 객체임 - 그래서 handCards를 배열로 선언한다 해도 결과물이 이차원배열인 것도 아니다!
    -> 굳이 쓴다면 배열 속에 객체가 있는 형태가 될 것. [{1, 3},{2, 5},{3, 2}] 이런 식.
    -> 이 형태는 이미 상현님이 구현해 주셨다. Map 으로 써도 상관없고, Map에 맞게 바꾸고 싶다면 Map 관련 메서드를 써서 조금만 손보면 될것.

튜터님께 질의응답

  • repeated로 되어있으니 Map 그대로는 못보낸다. 배열로 바꿔줘야 할 것.
    -> 하지만 반드시 명세대로 구조가 나올 필요는 없다. 보낼때만 명세에 맞춰주면 ok.
  • 보내고 받을때는 반드시 명세대로 맞춰줘야 한다.
  • 그러면 서버에서 보낼때는 배열로 만들어서 보내주면 되고, 받을때도 배열로 올 것이다
    -> 그 배열데이터를 handCards 맵에 있는지 찾아서 count 값을 내려준다던지 하면 될 것(Destroy 할때)
  • 튜터님 말씀: 이 방식(Map 쓰는 방식) 대로 가면 이게 맞다. 구현방식에 정답은 없음!

동혁님의 조언 - Map으로 쓰면 전달할때 바꿔야 할텐데, 어떻게 바꿔줄 것인지 고민하면 좋겠다

일단 지금 생각하고 있는건 Object.entries로 배열에 담긴 객체 형태로 바꿔주는 것.

  • 그러면 클라에서 받을 때도 배열로 올 텐데 그건 어떻게?
    -> 이건 handCards 배열에 뭔갈 넣는다기 보단 키값만 참조해서 카드 파괴 시에 쓸테니 크게 상관 없을 것 같다.
    -> 만기적금이나 복권당첨 같은 로직은 서버 메모리 어딘가에 존재하는 게임덱에서 필요한 장수만큼 썰어주면 되니 OK.

Map() 객체를 배열로 바꾸고 싶다면 - Array.from(Map객체) 를 쓰자

그런데 이러면 단순히 이차원배열이 되어버리니 주의.

profile
갑자기 왜 춤춰?

0개의 댓글