3주차 3️⃣

[복습을 위한 질문]

  • UITableview는 왜 사용하는가?
    -> 대량의 테이터(여러 종류가 섞인..)를 한눈에 보려고..? 그리고 유동적이기 때문에

  • UITableview는 언제 사용하는가?
    -> 위의 질문과 비슷한 맥락이긴한데, 직접 해보니까 웬만하면 안쓰고싶다 ^__^

  • UITableView는 어떻게 사용하는가?
    -> 해줘야할게 여러가지가 있는데 datasource랑 delegate 선언..(매우중요)해주고 extension으로 필수적인 함수 몇개를 정의해줘야한다.

과제

  • 1.1 UITableView를 이용한 프로그래밍
  • 1.2 UISwitch의 isOn 속성이 유지되지 않는 버그 해결하기

과정

우선 결론부터 얘기하자면 너무 진이 빠지고 힘들었지만 배운건 정말 많았던 일주일이였다.. 😩
아직도 한참 멀었지만 그래도 App내 VC들끼리의 데이터 이동방식과 어떻게하면 좀더 효율적인 로직을 짤 수 있는지 깊은 고민을 거듭하면서 많이 배울 수 있었다.
정말 시도해보지 않은 방식이 없는것같다. 저번주에 이어

1. instance property

2. segue

3. 자기 자신(VC)을 통채로 인스턴스화시켜서 넘겨주는 방식

4. delegate

5. notificationCenter

정말 하나하나 다 시도해보면서 바닥부터 차근차근 해봤다..
이해가 가지 않아 하루종일 구글링도 했었고, 프로그램 멘토님한테도 질문하면서 좀 더 나은 데이터 이동 방식을 찾으려고 노력했다..
얘넬 깊이 공부하다보니 왜 2주차때 Life Cycle을 공부시켰는지 더욱 더 이해가됐고, 정말 좀 더 많이 알고있을수록 좀 더 나은 로직을 짤 수 있다는것을 뼈저리게 느낀 일주일이였다.

근데 문제가 있다.

이것저것 기능 구현 + 데이터 이동방식에 대한 깊은 고찰 & 학습때문에 UI구성을 많이 못했다.. 그리고 기능도 조금 부족한것같다..
최우선으로 하고자했던 기능들은 완성했지만 아직 한참 부족한것같다..

우선 이번주에는 TableView를 이용한 프로그래밍이 주제였기 때문에 당근마켓을 선정해서 만들어봤다.
원래는 TableView뿐만 아니라 collectionView와 좀 더 다양한 UI 구성 및 기능들을 구현하려했는데.. 애석하게도 그러지 못했다..
우선 (미..)완성된 App 내 화면이다.

이번에도 시간분배에 실패해서 기능구현에만 너무 집중하다보니 UI구성이 너무 허접하군..😓

사용한 주요 컴포넌트

  • Table View / Table View Cell
  • Tab Bar Controller
  • Navigation Controller
  • Scroll View
  • Stack View
  • Label / Button / Image View / Text Field

구현한 기능

  • 메인화면에 Table View 생성(Table View Cell Read)
    -> 처음 보이는 화면은 남들이 올려놓은 중고상품들을 보이게 하는 형식으로 미리 데이터들을 넣어놨다(아이템들의 이름, 가격, 사진 등등)

  • 내 물건 등록(Table View Cell Create)
    -> 여기서 굉장히 큰 이슈가 있었지만..(추후 설명)
    -> 현재 VC가 아닌 다른 VC에서 이름, 가격, 이미지를 선택 및 입력하면 메인화면 Table View에 새로운 Row가 추가되고 동시에 나의 당근 페이지의 판매 내역에있는 Table View에 추가됨.
    -> Delegate와 notificationCenter 사용

  • 나의 당근 페이지의 판매내역에서 아까 만든 Cell 삭제 및 수정(Update and Delete)
    -> 아까 새로 만든 Cell의 데이터들이 넘어와 삭제 및 수정 가능하고, 이렇게 삭제 및 수정된 데이터는 다시 메인 VC로 넘어가 Table View를 갱신해줌

중간중간에 있었던 issue

  • 메인 이슈

Xcode에서 기본적으로 내장해주는 Table View Cell의 CRUD 방식말고, 실제 APP처럼 다른 VC에서 cell들을 추가, 삭제, 수정하고 싶었다.

근데 역시나 VC간의 데이터 전송 이슈가 있었어서 어떻게하면 이 데이터들을 계속해서 뿌려주면서 다시 받아올까에대한 고민을 정말 많이 했다..

추후에 알게된거지만 구조체 데이터모델을 쓰면 굉장히 편하다고 들었지만, 일단 이번주 과제를 할때에는 APP 내부에서 데이터를 주고받는 형식을 택했다.

정말 간단한 view를 넘겨줄때에는 instance property 형태로 넘겨주었고, 한 두다리 정도 걸쳐져있는 VC에 데이터를 주고받아야할때에는 delegate 패턴으로 넘겨주었다..

하지만 아예 멀리 떨어져있는 VC에 데이터를 전송해야할때에는 위같은 방법들이 먹히지 않았다..

그래서 찾아낸것이 notificationCenter 이다.

notificationCenter를 쓰면 아예 관련이 없는 VC에도 데이터를 쉽게 전송할수있다.

하지만 이것 또한 View가 한번은 Load되야 Observer가 생성된다.. 혹은 Post해준다..

정말 원래 이렇게 하는 방식이 딱봐도 아닌것같지만, 앱 내부 VC에서 계속 서로 데이터를 주고 받는 로직을 짜면서, 데이터 전송에 대한 굉장히 깊은 지식을 쌓을 수 있었다.

다음번에는 무조건 데이터모델을 하나 만들어서 관리해줘야겠다..

아쉬웠던 점

  • 전반적인 UI 구성이 미흡했음..

  • 데이터 관리를 그래도 어지쩌지 다 해주긴하지만 데이터 모델을 세우지 않았던것

  • Collection View를 못썼다..

  • 로직을 짠다고 짰지만 보이지 않는곳에서 오류가 많았다..

  • 시간 분배에 실패했다..

이번주 과제를 하면서 느낀점

  1. 데이터관리는 웬만하면 데이터모델을 세워서 관리하자!

  2. 시간분배에 제발 신경을 많이 쓰자.. 나는 철인이 아니다..

  3. 그만할까라고 생각하는 시간에 차라리 코드 한줄 더 쓰자!

  4. 다음주엔 좀 더 열심히 하자..

전체코드: https://github.com/shintaewon/RC_week_3

profile
일단 배우는거만 정리해보자 차근차근,,

0개의 댓글