No author
This post's author information has been deleted.
Written on
·
43
0
class RestaurantRatingStateNotifier
extends PaginationProvider<RatingModel, RestaurantRatingRepository> {
RestaurantRatingStateNotifier({
required super.repository,
});
}
super는 부모쪽의 것을 받아온다고 알고 있는데
제네릭으로 상속받을 클래스에 레포지토리를 명시해서
RestaurantRatingRepository 를 가져올 수 있는걸까요?
제네릭에 대해 이해가 쉽지 않네요. 어떻게 자동으로 제네릭에 두개를 입력해놨는데 그중 하나를 가져올 수 있는건지
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다!
[코드팩토리 디스코드]
https://bit.ly/3HzRzUM
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
Answer 2
0
안녕하세요!
둘 중 하나를 가져온다는건 어떤 말씀이실까요?
혹시
PaginationProvider<RatingModel, RestaurantRatingRepository>
위 코드에서 RatingModel과 RestaurantRatingRepository중 어떤걸 가져올지 알 수 있냐는 말씀이신가요?
이건 너무 당연히도 알 수 있습니다. 저희가 정의할때 첫번째 Generic을 뭐라고 명칭할지, 두번째 제너릭을 뭐라고 명칭할지 정확히 정의하고 있습니다. 변수랑 마찬가지로요.
그렇기 때문에 정확히 어떤 타입을 사용할지 "저희가" 정했으니 당연히 컴퓨터도 알 수 있습니다.
예를들어 Test<A, B>에
final A testA
final B testB
일 경우 testA는 당연히도 첫번째 제너릭 타입이고 testB는 두번째 제너릭 타입입니다.
감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다. nickelback님의 질문에 대한 답변을 드리겠습니다.
제네릭을 사용하면 코드를 좀 더 일반화시킬 수 있는 장점이 있습니다. RestaurantRatingStateNotifier
클래스가 PaginationProvider
를 상속받을 때, 제네릭을 통해 RatingModel
과 RestaurantRatingRepository
를 명시하고 있습니다.
이때 super.repository
는 실제로 PaginationProvider
에서 정의된 repository
필드 또는 생성자 매개변수를 뜻하며, RestaurantRatingRepository
타입으로 받아옵니다. 이는 PaginationProvider
클래스의 생성자가 repository
타입으로 제네릭을 받도록 설계되어 있다는 의미입니다.
즉, 코드 구조가 RestaurantRatingStateNotifier
클래스 생성 시에 RestaurantRatingRepository
타입의 인스턴스를 받을 수 있는 부분을 생성자로 처리하며, 이 부분이 super.repository
를 통해 전달됩니다. 이는 제네릭 타입 파라미터로 지정된 U
가 실제 RestaurantRatingRepository
로 결정되기 때문입니다.
이해하기 어려우실 수 있지만, 제네릭과 기본 클래스의 상속 관계를 잘 활용하면 코드의 재사용성과 유지보수성을 높일 수 있습니다. 제네릭은 타입을 결정하는 데 유연성을 제공하며, 타입 안전성을 유지할 수 있습니다.
관련 게시물 및 추가적인 설명은 아래 링크들을 참고하시길 바랍니다:
- StateNotifierProvider 관련 질문
- Notifier와 Provider 관계 질문
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.