You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
아래의 스크린샷 처럼 코드의 흐름이 위아래로 왔다갔다 하기때문에 한눈에 데이터의 흐름을 읽기가 쉽지 않다
스레드 관점에서도 datatask와 main으로 왔다갔다해야하는 상황이기도하다. 이런상황에서 경합이발생할 가능성이 생긴다.
아래코드에서 UIImage가 data에서 반환되지 못한경우 에러핸들링이 누락되어 nil nil이 반환될 가능성이 존재하고 이 경우에는 에러가 발생헀을때 어떤에러가 발생했는지를 찾기 어려울 수 있다
Async/Await 도입
아래의 코드처럼 가독성측면에서 코드의 흐름이 아래로 정렬되어 파악하기 쉬워진다
또한 함수 자체가 동기적으로 실행되기 때문에 스레드문제를 걱정할 필요가 없어진다
에러가 발생할 가능성이 있는경우 언레핑을 통해 에러를 던질수있으므로 에러핸들링이 누적될 가능성도 낮아진다
Async/Await의 메서드
URL을 이용해 data를 요청하는 경우 GET만 가능하다(GET중에서도 HEADER에 아무것도 없어도 되는경우)
URLRequest를 이용하는 경우는 GET이외의 httpMethod를 이용해야하는 경우, GET에서 header에 데이터를 담아야하는경우
Download의 경우는 메모리가 아닌 파일형식으로 저장하며 자동으로 삭제되지 않기때문에 삭제해주는 코드를 추가로 작성해줘야한다
URLSession.AsyncBytes
이건 굉장히 신기한 기능이었는데 사실 우리가 보통 api를 호출하는 곳은 viewwillappear이고 그러다보니 실제로 user가 다른 view에갔다 오는 action이 없다면 새로고침 버튼이라던지 혹은 아래로 당겨서 새로고침같은기능을 넣어줬어야했다(그동안은) 근데 이 urlsession 메서드를 사용하면 서버쪽에서 데이터가 변할때마다 line단위의 response를 쏴주는 api를 만들어주면 우리가 해당 결과를 line단위로 받아서 자동 갱신이 가능해진다
URLSession Delegate
이부분은 사실 제대로 이해하지는 못했지만 조금 강력한 기능인거같아서 정리를 해보면 urlsession을 사용할때 delegate 메서드를 정의해줄수있다(?)정도인거같다 예를들어서 해당 영상 예시에서 강아지사진에 좋아요를 누르면 urlsession을 통해 api호출을 시작하는데 그때 urlsession delegate를 파라미터로 만들어서 넣어주면(해당프로토콜을 채택한 함수) 해당 메서드를 사용할수있다(?)정도로 좀 러프하게 이해했다.
예시에서는 유저의로그인 여부를 delegate함수로 만들어서 api를 calling할때 여부를 확인할수있다
The text was updated successfully, but these errors were encountered:
Completion Handler를 활용한 URLSession의 문제점
코드의 가독성 문제
Async/Await 도입
Async/Await의 메서드
URLSession.AsyncBytes
URLSession Delegate
The text was updated successfully, but these errors were encountered: