[Eddy, Beck] Step3 - Download Image Concurrently #3
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
작업 목록
고민과 해결
Decoder 구현
(고민) json의 모든 데이터들은 String이었고, 이대로 저장하게 된다면 뷰 컨트롤러나 모델에서 해당 데이터들을 변환하는 작업들이 이뤄질 수 밖에 없었습니다. 이는 코드가 복잡해져서 유지보수성이 많이 떨어지는 상황이었습니다.
(해결) 짝 프로그래밍을 통해 같이 디코더의 기능을 구현하고 필요한 여러 데이터 형태로 디코딩이 가능하도록 하였습니다(Doodle.swift).
Model의 역할
(고민) 최초 디코딩 되어 메모리에 적재되는 데이터는 Doodle 객체를 담는 배열입니다. 하지만 뷰 컨트롤러에서 사용하는 데이터는 이미지 URL을 복사하여 Data의 형태로 다운로드 한 것인데, 이 작업을 뷰 컨트롤러에서 할지 모델에서 할지 고민해보았습니다.
(해결) 작업은 모델에서 진행하기로 하였습니다. 뷰 컨트롤러는 유저 이벤트가 발생하고 Serial Queue에서 진행해야 할 작업이 많은 부분이기 때문에 여기서 비동기/동기 작업을 하는 것은 UI를 망가뜨릴 수 있다고 서로 합의하였습니다.
비동기 작업 시 미리 데이터를 받아오고 진행하여 비동기 작업 진행을 최소화 하는 것도 전략이라는 것을 알 수 있었습니다.