작업내역 1주차 목요일 - donggeonoh/bithumb-techcamp-ios-1st GitHub Wiki

작업 내역

  • JSONParser 구현
    • JSONDecoder를 이용한 데이터 파싱
    • JSONSerialization을 이용한 데이터 파싱
  • API별 ValueObject 구현
  • 코인 리스트 컬렉션 뷰 셀 레이아웃 작성
  • 네트워크(HTTP) 통신 구현 및 PR 요청
    • 실제 네트워크에 의존하지 않는 Unit Test 작성

고민 및 해결

  • Ticker API에서 모든 코인에 대한 정보를 받아올 때 data가 같은 key일때 다른 타입의 value가 날아오는 문제

    Any타입은 Decodable을 conform하지 않기 때문에 사용할 수가 없었습니다. JSONSerialization으로 파싱도 고민해보았습니다. 하지만 파싱하는 곳에서 데이터를 처리하고 싶지 않았고 ValueObject에서 처리를 해주고 싶었습니다. 그래서 여러 타입으로 Decode될 수 있는 타입인 DynamicValue 타입을 사용하여 문제를 해결하였습니다.

  • NetworkService 실제 네트워크에 의존하지 않는 Unit Test 방법

    서버와 통신하지 않고 NetworkService를 테스트 할 수 있는 방법을 고민하던 중 우아한 형제들 기술 블로그를 참고해서 테스트를 진행했습니다.

  • httpVersion

    서버에 반환된 httpVersion 보통 1.1을 사용함.

     let successResponse = HTTPURLResponse(
         url: url,
         statusCode: 200,
         httpVersion: "1.1",
         headerFields: nil
     )
    

    httpVersion 애플 공식 문서