[스코클 TIL_230825]

7과11사이·2023년 8월 25일
0

스파르타코딩클럽

목록 보기
41/90
post-thumbnail

오늘의 학습

  • 클로저를 활용한 데이터 전달

    후발대 강의에서 singleton 패턴 또는 전체 viewController로
    데이터를 뿌릴 data manager를 구성하는 것보다 클로저에 대해 알려주었다.

    강의를 들으면서 코드를 짤 때 고민해야한다는 점이 저런 부분인 걸 이해하게 됐다.
    단순히 코드르 짜는게 중요한 게 아니라, 어떻게 작동하는 코드를 전달할 것인지가 중요했다.

A. 싱글톤 패턴 활용

나는 이 방법을 선택했다.

다른 방법은 어떻게 할 수 있는지 생각을 하지 않았는데,
클로저를 활용해서 데이터를 전달하되, 이전 단계로 계속해서 이동할 수 있는지 조차 몰랐었다.

나의 생각은 공용으로 데이터를 받아 드리는 객체가 존재한다면 데이터 보관 및 정리가 용이할 것 같다는 생각을 했다.
더불어 특정 행동을 담당하는 객체 하나를 생성하게 되다보니 더욱 객체 지향적인 코드에 맞지 않을까 싶었다.

class TodoManager{
    static let shared = TodoManager()
    private let userDefaults = UserDefaults.standard
    static var list: [Todo] = [
        Todo(id: 0, title: "여러분~", isCompleted: false, timeStamp: .now),
        Todo(id: 1, title: "여러분~~", isCompleted: false, timeStamp: .now),
        Todo(id: 2, title: "부~자 되세요~", isCompleted: false, timeStamp: .now),
        Todo(id: 3, title: "꼭이요~~~", isCompleted: false, timeStamp: .now),
        Todo(id: 4, title: "한국 광고", isCompleted: false, timeStamp: .now),
        Todo(id: 5, title: "한국 타이어", isCompleted: false, timeStamp: .now),
        Todo(id: 6, title: "탕수육", isCompleted: false, timeStamp: .now)
    ]
    static var completedList: [Todo] = []
    ...
    중략
    ...
}

위처럼 해당 클래스를 공용으로 처리할 수 있도록 타입 프로퍼티를 생성했고, static 메서드를 일부 생성하여 해당 객체에서 전체적으로 처리를 할 수 있도록 만들었다.

B. closure 활용

아직 코드를 제대로 이해하고 있지 않아서 뜯어봐야 하는 입장이다.
하지만 지금까지 이해했을 때는 데이터를 담는 cell에서 직접 입력 받은 데이터를 테이블뷰를 담고 있는 ViewController로 넘기고, 해당 데이터를 다시 메인으로 전달 - 정제하여 완료된 값만 다른 테이블 뷰에서 보여질 수 있도록 정리가 가능하다고 이해했다.

여기서 특징은 클로저를 활용해서 VC와 Cell 등에서 직접 데이터를 전달할 수 있다는 점이다.
이전처럼 전역 데이터를 관리하는 DataManager 없이도 가능하다는 점에서 클로저를 잘만 구현했을 때는 사용할 수 있는 방법이 정말 다양할 수 있겠다는 생각을 하게 됐다.


*한가지 놀랐던 점은 cell에서 데이터를 직접 viewController로 넘길 수 있다는 점이었다...
이렇게 되면 DataManager라는 객체를 만드는 이유가 뭘까?

0개의 댓글