swift 5.5부터 도입된 async await 문법을 배웠다.
pyramid of Doom 을 방지하고자 조금 더 개선된 문법이라고 한다. 사실 Js에서 쓰던 패턴을 그대로 도입했다고 해서 키워드자체가 낯설진 않았다.
하지만 아무래도 새로도입되었다보니 기존의 DispatchQueue.global()과 클로져, 콜백함수를 통한 비동기 함수 구현을 더 잘 이해해야 할 것 같다.
예를들어 array에 반복적으로 접근해서 append 하려고 할때 비동기로만 돌리게 되면 일부요소가 유실된 채로 (append하지못한 요소발생)될수있다. 이때 내부에 직렬큐 async 를 만들어 그 안에서 append함수를 돌려주면 해결가능해진다.
(복습) inout 파라미터 => 함수외부의 변수를 함수내부에서 변경가능하도록 값복사가 아닌참조스타일을 사용하고자 할때 함수정의시에는 inout키워드를, 호출시에는 &키워드를 사용한다.
원본에만 타입파라미터를 선언하므로, 확장타입에 타입파라미터를 선언하지 않아야한다. 확장형의 내부에서 제네릭타입을 사용만 가능함
첫 테스트 1주차~2주차 내용으로 진행되었다. 아직 어렵지는 않았지만 확실히 코드를 좀더 많이 쳐보고 swift convention을 해치지않는 코드를 작성해야겠다고 느꼈다.
한번 더 개념정리도 되는 것 같아서 좋았다.
특히 표현식 에 대해 하나의 결과값으로 평가되는 문장 이라는 개념을 좀더 명확히 할 수 있었다.
개인적으로 nil-coalescing 문법을 삼항연산자와 살짝헷갈렸던 부분(개념말고 표기할때) 과 random 숫자를 받아서 평균을 구하는 함수를 만드는 부분에서 return 값인 output을 double로 받아줘야하는 부분, 그리고 내부에서도 double/ double 처리해줬어야하는 부분을 못챙겨서 아쉬웠다.
그리고 개인적으로 이 문제는 좀 독특하게(array에 요소를 랜덤숫자 append하고 array의 요소들의 평균을 구하는 식으로.. (자동구현했다고 보면 될듯하다) 했는데 정답코드에 있는부분도 잘 확인해 봐야겠다.
오늘도 수업때 강조할부분을 잘 말씀해주셔서 너무 재밌게 들었다. 특히 열거형이 임시타입의 형태를 가지고 있는 셈이라, 한번 더 재처리 (즉 switch문 처리) 가 필요하다는 부분, 그리고 열거형으로 인스턴스를 생성하는 방법을 case를 선택하는 것으로도 볼수있다는 관점은 내가 미쳐 생각하지 못한부분이라 좋았다.
그리고 사실 return이 없는 함수라고 표현하지만 실제로는 Void라는 빈 튜플을 return하는 것이라는 것
옵셔널타입과, 열거형에서 연관값이 있는경우의 switch 문 사용한 case let 바인딩을 복습해서 좋았다.
case .hardDisk(gb:let GB)
또 최근문법으로 가변파라미터를 한개이상 쓸수있게 된것, 그리고 javascript 처럼 동일한 상수명일때 축약할수 있는 문법이 추가된 것을 알게되었다.
if let 바인딩 코드에서 자주보게될 패턴일듯..!
예) if let num = num
=> if let num