에러처리를 간만에 복습했다
확실히 두번째 듣는게 이해가 더 잘된다. 에러정의, 에러를 던지는 함수, 에러처리 세가지 파트로 나누는데,
에러를 던지는 함수에서 두가지 정도로 처리할 수 있었던(내가 직접 열거하거나 , 기본제공하는 error프로토콜을 가진 error상수를 타입캐스팅+바인딩해서, 바인딩한 변수를 switch문을 통해 case를 돌려서 처리하거나) 부분이 훨씬 이해가 잘 되었다.
네트워킹 실제 예시는 절대 직접구현은 못할듯하다. 많이써보고 익숙해져야함. 그래도 저번보다 확실히 이해도가 올라갔다.
에러를 던지는 함수를 처리하는 함수는 함수로 감싸서 다시 던진다고 이해하면 편하다, 즉 함수로 감싸는 부분에는 try문은 있어도 catch문이 없고 이렇게 try문에서 던진함수를 do try catch문으로 다시 받아서 처리해야한다 (여기서 do try문에서 받아준다)
rethrows 키워드를 활용한 rethrowing함수로 에러를 다시 던질 수 도 있다. throwing함수를 파라미터로 받을때 내부에서 이 콜백함수를 try문 뒤에서 실행하면서 다시 이 콜백함수를 던질 수 있다. 그럼 다른 do try catch문의 try문에서 해당 고차함수의 콜백함수를 실행하면서 받아서 처리를 해주게 된다. try someThing(some:throwingFunc)
이때 에러를 변환해서 던지는 것도 가능하다, rethorwing함수 내부에 새로운 error타입을 열거형으로 정의해서 케이스를 나열해준 후 catch 문에서 해당 에러차입으로 열거하여 던질 수 있다. catch { try changedError.cErro }받는 과정은 위와 똑같다.
일반함수, throw함수, rethrow함수의 상속시 재정의 가능여부에 대해서는 포함관계를 생각하면 편하다. 재정의할때 한마디로 rethrowing함수거나 throwing 함수라면 반드시 rethrowing, throwing 함수로 재정의 해야하므로 thorws, rethrows 키워드와 try 구문을 잊지말자
defer문은 스코프 종료 직전으로 실행을 예약하는 구문으로(미루는 구문) 함수 내 defer문과 함께 return등 가드문이 사용될때 주의해야하는 점(한번은 호출되어야 예약이 되어서 실행도가능해진다. defer을 만나기전 빠져나가면 예약조차안됨)
그리고 스코프 이므로 for문에서도 주기별로 주기가 끝나기 직전에 defer는 실현된다는 점 등이 알아둘만 하다.
try문은 try? try! 문을 사용하면 catch문을 생략도 가능하지만 try?의 경우 옵셔널바인딩을 따로해서 리턴값을 처리해줘야하고 try!의 경우 반드시 에러상황이 없는(nil이 없는) 경우임을 확신할때만 사용해야한다.
전반적인 흐름, 핵심파악, 코드를 이해할 수 있는 능력을 우선탑재하는것이 중요, 중요한 부분만 정리, 많이 써보는걸로
HTTP App계층의 프로토콜, 시작라인/헤더/공백/메시지바디로 구성 (request response둘다) 단 request 일때 response일때 시작라인 구성이다르다(request : 메서드/ 요청대상/HTTP버전)(response : HTTP버전/상태코드/문구)
메소드 : HTTP프로토콜의 약속(get post put patch => CRUD)
상태코드(1xx:처리중 / 2xx : 정상 / 3xx: 추가동작필요 / 4xx:잘못된요청 /5xx:서버내부문제)
get메서드 : URLQuery 쿼리파라미터 주로사용 (그외 put patch post 는 메세지바디 사용) url에서 ?뒤에 key=value형식으로 &를 통해 연결되어있는 부분이 쿼리파라미터
REST API에 대해 이해하고 사용가능하도록, 어떤게 RESTful API일지 생각해보자
ios의 네트워킹 : URL구조체(옵셔널타입으로 unwrapping필요) URLSession객체생성으로 세션연결 dataTask메서드로 HTTP요청 후 데이터 받는 로직 resume()으로 시작
URLSession을 생성하는 두가지 케이스를 말해보자
dataTask 클로저형식 에러처리, response처리, data처리 시 가드문사용 편리
data 를 원하는 구조체/클래스로 정리할때 JSON Parsing(JSONDecoder객체 인스턴스의 decode메서드사용 => 내가 원하는 구조체도 codable프로토콜 채택필수)
따로 data to class/struct하는 parseJSON함수를 만들어 쓰면 편리 => 아까 받아놓은 data만 던지면 됨
print(#function) 함수이름출력
dump 더 깔끔하게 출력
fetching은 비동기적으로 동작해야하므로 리턴타입이 아닌 클로저타입을(콜백함수를) 사용하여 구현한다 콜백의 콜백의 콜백..이해하기
클로저내에서 객체의 속성, 메서드 접근시 self키워드 필요