ios개발자를 위한 여정 -4

박경현·2022년 5월 4일
0
이번 Udemy강의 시간에는 network연결과 xcode에서 API 사용법에 대해 배웠다.

어느정도는 알고있었지만 실제로 클론 안하고 만들어보니 아직 parseJSON()함수 만드는 것도 제대로 하지 못하는 것을 보고 다시 한번 더 깊게 공부해야겠다고 다짐했다

ByteCoin앱 설명 및 구조

앱 설명

각 나라의 화폐를 고르면 비트코인의 금액이 유로나 달러 등 나라의 화폐단위로 나온다!

즉 유저가 picker를 스크롤해서 굴려서 화폐를 선택하면 coinAPI와 네트워킹해서 알맞은 값을 전달해준다

앱에서 중점이 된 내용

역시 네트워킹해서 API를 가져오는 부분이 중점이다

추가로 프로토콜을 써서 delegate를 가져오는 방법 또한 깊게 배웠다

앱 만들면서 배운 내용 및 깊게 탐구한 내용

1. delegate를 쓰는 이유!

protocol CoinDelegate {
	func didFailWith(error: Error)
    func didIpdatePrice(price: String, currency: String)
}

이번 앱에서 CoinDelegate라는 프로토콜을 만들어서 바로바로 API로 요청해서 currency를 업데이트 했고 에러를 표시하게 했다

일단 delegate는 위임이다 즉 사용자 인터페이스 제어에 관한 권한을 가질 수 있다는 것을 말한다.

내가 CoinDelegate라는 delegate를 적음으로써 이 안에 있는 메서드의 이벤트를
CoinDelegate라는 객체에서 처리해준다!

이렇게 하면 이와 관련된 이벤트들에 대해 따로 처리하지 않아도 되기때문에 편함!

delegate쓰는법

1.class가 delegate를 채택해야한다! -> ex) extension으로 빼서 적으면 깔끔해보인다
2.coinManager.delegate = self 로 작성해서 self의 제어 권한을 넘겨준다!
3.delegate는 protocol이기 때문에 option이 앞에 안적힌 함수에 대해 무조건 호출해줘야한다!!

2. DispatchQueue.main.async를 사용했던 이유!

extension ViewController: CoinDelegate {
	func didUpdatePrice(price: String, currency: String) {
    	DispatchQueue.main.async {
        	self.bitcoinLabel.text = price
        	self.currencylabel.text = currency
        }
    }
}

이번 앱 만들때 적었던 부분이다.

DispatchQueue.main은 메인 스레드에서 전역적으로 사용 가능한 serial queue이다.
앱의 실행에 있어서 끊임없이 앱의 이벤트를 처리하고 있습니다.

일단 동기인 sycnc와 비동기인 async가 있다

DispatchQueue.main.sync이면 작업이 다 끝날 때 까지 현재의 queue는 block되어 기다린다.

그렇기에 main이 sync면 기다리기 때문에 작동을 멈춘다!!

비동기인 async는 병렬처리를 해줘서 현재의 queue에 컨트롤을 넘겨주고 작업이 끝나기 전까지 기다리지 않는다!

데이터를 로드하거나 특정 무거운 작업을 실행하게 될 때 어플리케이션의 UI는 느려지거나 멈추게 됩니다.
DispatchQueue.main.async는 클로저 안의 실행문을 작업을 대기열로 보내 비동기로 작업을 실행하여 동시에 2가지 이상의 task를 수행할 수 있도록 도와줍니다.

3. url의 흐름 (urlsession을 중점으로)

4가지로 나눌 수 있다.

  1. url설정!

    RestAPI방식으로 연결하려면 URL이 필수이기 때문에 먼저 url을 설정해준다!

  2. urlSession을 통해 HTTP를 이용해서 네트워킹 연결

    URLSession은 URLSessionConfiguration을 통해 생성할 수 있습니다.
    이렇게 생성된 URLSession을 통해 한 개 이상의 URLSessionTask를 생성할 수 있으며, 이 URLSessionTask를 통해 실제로 서버와 통신을 할 수 있습니다.


    default 방식은 디스크 기반의 캐싱을 뜻한다! -> 임의의 공간에 임시저장해서 빠르게 가져올수있다! 라고 생각하면 편하다

  3. dataTask설정
    task객체는 일반적으로 session을 통해서 객체가 서버로 요청을 보낸 후 응답을 받을 때 url기반의 내용들을 받는거!

    session.dataTask()의 경우 data객체를 통해서 받는다!!

  4. task.resume()으로 네트워킹 시작
    dataTask를 시작 시키기 위해 마지막에 적어준다!! 필수!!!

셀프 피드백

아직까지 아는 내용들을 제대로 조합하지 못하는 모습을 보면서 더 많이 코딩해봐야겠구나 느꼈고,

앱이 배울수록 재밋어서 확실히 이 분야로 직업을 삼는다면 내 스스로가 행복할 것이라고 생각한다.

그러기 위해서는 네이버 부트캠프 ㅜㅜ 알고리즘 공부에 더 많이 시간을 쏟아야하는데 ㅜ

더 열심히 해보자!!

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글