눈물의 완강파티
이렇게 강의를 완강하는게 쉽지않다니..그래도 완강해서 기쁘다. 최대한 집중력을 끌올하려고 노력했는데 잘되지 않아서(특히 명절이후+스위프트행사 후부터) 각종 책도 읽고, 영상도 읽고, 열심히 이것저것 적용해보았는데..역시 뭐니뭐니해도 그냥 일단 해야할걸 하는게 심신건강에도 최고다.
사실은 이제 시작이다(그래도 찰나는 기쁘게 해주세요)
오늘 배운 부분은 사실 실제 앱만들기를 많이 진행해보면 더 자주 들여다보고 익숙해지고, 다시 보러 오게 될 것 같다.
가볍게 정리
Equatable => 상속 Comparable, Hashable
Equatable 구조체 열거형의 경우 프로토콜 채택시 저장속성, 연관값이 Equatable 할때는 연산자 == 타입메서드를 자동구현해줌 / 연관값이 없는 열거형은 채택없이도 자동구현해줌 / 클래스는 채택 후 타입메서드로 구현 필수
Comparable 열거형의 경우 원시값 없다면(연관값 있어도) 프로토콜 채택만 하면 < 연산자 타입메서드 자동구현 / 구조체, 클래스의 경우 프로토콜 채택 후 구현 필수 / Comparable 채택 시 Equatable 자동상속으로 구현 필수(이는 Equatable 원칙을 따른다 / 즉 클래스는 필수구현, 열거형과 구조체는 경우에 따라 자동구현되기도 함)
Hashable hashable하다라는 것은 Dictionary key로 쓸수 있다는 것, Set의 요소로 쓸 수 있다는 것 / 구현하기 func hash(into hasher: inout Hasher){hasher.combine(속성)} / Equatable과 비슷한 원칙으로 동작한다 ( 클래스는 필수구현, 열거형 구조체는 프로토콜 채택 시 저장속성이나 연관값이 Hashable하면 자동구현 / 연관값없는 열거형은 채택없이도 자동구현) / 마찬가지고 Equatable을 상속하므로 클래스는 무조건 == 타입메서드 필수구현해줘야함
구조체를 Hashable 하게 해주면 구조체의 인스턴스들을 set의 요소로 넣어쓰는 등의 행위가 가능하다
Never타입 제어권을 리턴하지 않는 (실행 후 원래 코드의 위치로 돌아가지 않는) 타입임 / 동시성과 약간은 유사, 반대되는 개념인게 동시성은 비동기의 경우 제어권을 먼저 리턴하는 것이다
Never타입은 빈 열거형으로 당연히 인스턴스 생성이 안된다(열거형에 케이스가 있어야 인스턴스 생성이 되는데) 런타이중 발생가능한 에러를 검증, 테스트하기위한 용도
Never타입을 리턴하는 경우 => 함수내에서 앱 종료(문제 발생가능성 있는 곳에 fatalError, assert, precondition 메서드 삽입/ 해당 메서드들은 앱을 종료시킴/ 해당 메서드들의 리턴타입이 Never) / 에러처리코드로 제어권 전달(do try catch 등)
디버그 모드에서만 활성화 assert()=> 참거짓 판단 파라미터 => false일때 앱종료, message띄움 / assertFailure() => 거짓 condition에서만 사용, 앱종료와 message띄움
디버그, release모드에서만 활성화 precondition()=> 참거짓 판단 파라미터로 false일때 앱종료 message띄움 / preconditionFailure() => 거짓 condition에서만 사용 앱종료와 message띄움 / 업데이트 확인 여부 등 앱 출시 후 사용
디버그, release, 베타 모드에서 모두 활성화 fatalError() => 무조건 종료, 잘안씀
서버다운등의 개선 불가한 런타임 오류는 앞서 배운 Error처리 => 앱꺼짐 방지를 통해 검증,해결
타입인스턴스(타입.self 혹은 type(of:인스턴스))의 타입
타입인스턴스란 데이터영역의 타입속성이 있는 메모리저장공간을 의미
타입(프로토콜 제외).Type 혹은 프로토콜.Protocol 과 같이 표기
Int.max => 사실은 Int.self.max(타입인스턴스의 max타입속성접근)
typealias AnyClass =AnyObject.Type기억하기
메타타입을 사용한다는 것 => 인스턴스가 아닌 타입자체(타입인스턴스)가 필요한 경우
늘 먹던걸로 주쇼