-
네트워크 통신 모듈화 with Alamofireios 2020. 7. 21. 19:15
들어가며
회사에서 앱을 개발하던 중, 네트워크 통신을 하는 로직이 항상 마음에 들지 않았습니다. 분명 같은 구조이고 요청할 때 들어가는 전달 변수만 달라지는데 왜 나는 왜 똑같은 코드를 반복하고 있는지 하고 있는 제 자신도 비참해 보였습니다. 그러던 중, 선배 개발자가 " Network Request 하는 건 하나만 만들고 바뀔 값만 전달 변수로 전달해라 " 이렇게 조언을 해주셨습니다. 선배의 말을 듣고 코드를 바꾸고 있는 찰나 좋은 정보는 함께 공유하면 좋을거 같아서 이렇게 글을 쓰기 시작했습니다.
본론
Problem -> RestApi Call With Overlapped Same Code diffrent Paraemters
잘못된 점
- App에서 Rest Api를 요청하면 이런 구조, 형식으로 같은 코드가 반복
- @escaping (Bool?,Error?)->()
- 성공시 (true,nil)
- 실패시 (nil,error)
- 이로 인해 실제 기능부에서 응답값을 사용할 때 적어도 두 번의 값을 확인해야 하며 , unwrapping을 해야한다는 점
Solution -> make only a Requester for REST API
먼저 응답 값을 한개의 객체로 관리하기 위해 enum을 생성했습니다.
response 객체는 enum 타입이며 Generic 타입제약을 사용하여 Codable을 채택한 객체만 올 수 있도록 하였다.
request Almofire - request하기 위해서 필요한 파라미터들을 requestGeneralAPI(url:params:....) 정의
- T.Type 매개변수로 받아 <T> 타입 설정
- Alamofire.request 호출
- Json 객체 Decode
- NetworkResponse 에서 정의에 따라서
- 성공시 : completion(.success(responseVO))
- 실패시: completion(.error(error))
- 결과, api를 호출하는 Controller에서는 switch 구문으로 success인지 , failure인지 구분만 하면 됨
API CALL TEST
결론
위 코드는 제가 작성한 테스트 코드입니다. 제가 작성한 코드를 실제 기능부에서 호출할 때 어떻게 될지 확인하는 차원에서 작성해 봤습니다. 부족한 글이지만 읽어주셔서 갑사합니다. 이번 기회로 코드의 제가 처음에 작성했었던 불필요한 코드들을 더 이상 제 프로젝트에서 배제시키기 위해 노력하겠습니다 XD
'ios' 카테고리의 다른 글
ARC: Resolving Strong Reference Cycles Between Class Instances (0) 2020.09.07 ARC (0) 2020.09.06 APNs 사용법 (0) 2020.07.20 Property with type 'Any' does not conforms with codable protocol (0) 2020.07.13 단위 테스트 (Given, When, Then) 활용 (0) 2020.06.23