네트워킹이 많았던 주말, 회복하는 일요일이었다 (토요일 공부량은 0에 수렴)
제네릭타입에 대해 정리를 마저 했고, Result타입에 대해 사용법, 사용이유, 문법등을 정리했다.
Result타입의 경우에는 컨퍼런스에서도 재밌게 봤어서 낯설지는 않았고, 오히려 원래 하던 에러처리 구문이 약간 헷갈려서 복습해야했음
간단히만 정리
제네릭의 확장 : 확장시에는 파라미터사용 x (안씀) where절로 타입조건(제약) 추가가능함
타입의 제약 : 프로토콜제약(해당 프로토콜을 채택한 타입만), 클래스제약(해당 클래스의 상속체계에 있는 타입만) 콜론 뒤에 프로토콜 혹은 클래스를 사용한다 <T:>
함수호출시 해당 타입제약을 충족하지 않으면 제대로 함수 호출되지않음
제네릭으로 이미 타입구현 되어있는 함수도 같은 이름으로 구체적인 타입을 다시 명시해준 함수를 만들면, 구체적인 타입의 함수로도 사용가능함
프로토콜 제네릭타입사용시 associatedtype T 로 연관 타입 표시 / 구현시 타입명시(typealias T = 타입 생략가능)
associatedtype T : 프로토콜 처럼 타입제약도 사용가능
Result타입 내부 열거형으로 구현되있음(.success(연관값), .failure(연관값))
함수 정의시 리턴값을 Result로 구현(이때 연관값에 정확학 성공타입, 실패타입(에러타입 정의해둔 것)명시), 내부 조건으로 Result.success(연관값), Result.failure(연관값- 에러타입(열거형)의 케이스까지 나열) 걸러서 결과적으로 Result타입을 반환
반환된 Result타입을 변수로 받아서 switch 문을 통해 case 나열 및 let 바인딩으로 다시 연관값을 꺼내주면서 성공/에러처리함
get()메서드 에러를 던지는 함수로 다시 바꿔줌 , 그외 다양한 Result내에 구현되어있는 고차함수 사용가능
실제 함수 정의시 에러타입을 명시적으로 선언하고 타입캐스팅이 불필요해져서 함수를 호출하는 do try catch 문에서 에러형식을 특정짓기 어려운 예전방식을 사용할때보다 에러형식이 명확해짐