TIL - 2024.03.17 일요일 (개인프로젝트 14일차)

· 성취/개선/학습한 내용 🏆

  • flatMap
  • Alert.TextField
  • Realm - to one relationship
  • Realm - EmbededObject
  • collectionView - ItemSize
  • DispatchTimeInterval

· 경험한 이슈 😫

  • 저번 주부터 컬렉션뷰에 cell을 몇천 개씩 만들고, 컬렉션뷰와 cell 사이즈를 화면 사이즈에 따라 다르게 처리하면, cell과 cell 사이에 빈틈이(화장실 타일처럼) 생기는 이슈가 발생했었다. 오늘 이 부분을 여러 값을 넣으며 실험을 해보다가 그 이유를 찾게 됐다. 바로 cell의 itemSize 때문이었다. itemSize엔 CGRect 값이 들어가는데, 이 값에 정수가 아닌 소수가 있는 실수를 넣으면 계산 과정에서 cell과 cell 사이에 빈틈이 생기게 된다. 그래서 값을 조정하여 정수 값이 들어가게 설정하니, 셀과 셀이 붙어 있게 뷰가 그려진다.

· 모르는 부분???? 🥺

  • 사실 애니메이션 같은 것을 이용하면 컬렉션뷰의 셀을 천천히 어두운 색에서 clear한 색으로 바꾸는 것을 할 수는 있겠지만 이렇게 처리해도 되는지 잘 모르겠다. 
  • 사실 고차 함수에 map 같은게 얼마나 많은지 무슨 용도인지 하나도 몰랐다. 그런데 이번에 flatMap을 사용하면서 이것은 확실하게 알게 되었다. flatMap은 이차원 배열의 하위 배열들의 요소들을 상위 배열로 다 옮겨서 일차원 배열로 만들어주는 것이다.

· 기술적으로 어려웠던 부분 😵😵‍💫

  • Realm을 다루면서 [[Int]]와 같은 이차원 배열은 어떻게 저장하고 사용할 수 있을까 고민을 많이 했다. 그리고 실제로 EmbededObject를 사용해서 구현이 가능하다는 것을 오랜 시간에 걸쳐서 알아낼 수 있었다. 다만 Realm의 불편한 점이라면 List <> 형태로 저장이 되기 때문에, 데이터를 넣어줄 때 혹은 읽을 때 불편하다는 점이다. swiftData는 편하게 데이터를 읽고 저장할 수 있다는데.. Realm에선 이 부분이 아직 익숙하지 않아서 힘들었던 것 같다.

· 생각보다 덜/더 걸리는 작업과 그 이유  😱/🥴

  • 코드를 뷰모델 / 모델 / 뷰컨트롤러로 분리하는 작업을 하다보니, MVC 패턴이라면 바로 구현할 수 있는 것을 비즈니스 로직을 따로 분리해야 해서 시간이 오래 걸린다. 또 Custom Observable을 사용하고 있는데, input / output이 많아지면 많아질수록 헷갈려서 흐름을 따라서 생각을 하다 보니 구현에 시간이 많이 소요되는 것 같다.
  • 또 어떤 한 부분을 고치면, 분명 다른 부분에 연관된 부분이 있어서 그 부분을 수정을 해줘야하니 시간이 더 걸렸다.

· 느낀점 🤩

 생각보다 구현에 시간이 정말 오래 걸린다는 것을 다시 한번 느꼈다. 이번 주말 동안 코드 작업만 했지만, 내가 생각했던 목표치의 6~7할 정도만 구현한 것 같다. 이래서 경험을 통해 이 작업에는 어떤 작업들로 세분화할 수 있고, 그 작업들을 하는 데엔 얼마나 걸리는지 파악하는 게 중요하다고 느꼈다.