inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

레스토랑 상세요청 구현하기

객체 안에 객체가 있을때 모델링을

142

Jun

작성한 질문수 2

0

final List<Map<String,dynamic> products; 

위와 같이 진행한다면

factory RestaurantDetailModel.fromJson({
  required Map<String, dynamic> json,
}) {
  return RestaurantDetailModel(
    id: json['id'],
    name: json['name'],
    thumbUrl: 'http://$ip${json['thumbUrl']}',
    tags: List<String>.from(json['tags']),
    priceRange: RestaurantPriceRange.values.firstWhere(
      (element) => element.name == json['priceRange'],
    ),
    ratings: json['ratings'],
    ratingsCount: json['ratingsCount'],
    deliveryTime: json['deliveryTime'],
    deliveryFee: json['deliveryFee'],
    detail: json['detail'],
    products: List<Map<String, dynamic>>.from(json['products']),
  );
}

fromJson 도 위와 같이 변경될 것 같은데, 이런 방식은 비효율적이거나 권장되지 않는 방식인가요?

객체 안의 객체를 따로 모델링 하는 이유는 객체 안의 객체를 인스턴스화해서 재사용하는데 목적이 있는 건가요?

 

수업때 설명한 방식은 List 안에 Map 형태의 키값이 정해지지 않아 데이터 추출이 번거로워질 수 있다고 생각하면 되나요? 

flutter 하이브리드-앱

답변 2

0

코드팩토리

안녕하세요!

객체 안에 객체를 넣으셔도 전혀 상관 없습니다. 그런식으로 많이 사용합니다.

데이터 추출이 번거로워진다는건 어떤 말씀이신지 조금 더 자세히 말씀주시면 부가설명 드리겠습니다. (예제와 함께 말씀해주시면 더 좋습니다.)

감사합니다!

0

Jun

RestaurantProductModel 을 따로 사용하지 않아 혹시 모를 타입체크 같은 것이 진행되어야 할 것 같다는 생각이 들어서였습니당

0

코드팩토리

타입 체크를 하고싶다면 물론 하시면 됩니다.

하지만 JSON으로 들어오는 타입 에러는 런타임에 터질 수 밖에 없고 무조건 터지게 돼있습니다.

감사합니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

Jun님께서 질문하신 내용은 객체 내부에 또 다른 객체가 포함될 때, 어떻게 모델링을 하는 것이 효율적인지에 대한 내용입니다. 질문에 대한 답변을 드리겠습니다.

객체 안의 객체를 다룰 때

  1. 객체 모델링의 기본 원칙: 객체(또는 클래스)를 사용할 때는 가능하다면 객체의 프로퍼티들도 객체로 정의합니다. 이는 데이터의 구조를 명확히 하고, 재사용성과 가독성을 높이는데 매우 유리합니다.

  2. Map<String, dynamic> 사용의 문제점: JSON 데이터를 Map<String, dynamic> 형태로 다루면, 타입 안전성을 잃게 되며 잘못된 타입으로 값이 저장될 수 있는 위험이 있습니다. 또한, 코드의 가독성이 떨어지고 데이터 구조가 복잡해질수록 오류를 확인하기 어려워지게 됩니다.

  3. 모델 클래스를 사용하는 이유:

    • 타입 안전성: 각 프로퍼티가 정확한 타입을 가질 수 있도록 보장합니다.
    • 가독성: 데이터가 어떻게 구성되는지 한 눈에 보기 쉽습니다.
    • 재사용성: 모델 클래스를 재사용하여 코드 중복을 줄일 수 있습니다.

JSON 데이터를 객체로 변환하는 방식

fromJSON 함수를 사용할 때 각각의 속성에 대해 적절한 타입의 객체로 변환하는 과정을 포함하는 것이 좋습니다. 예를 들어, products가 여러 제품의 리스트라면, 각각의 제품도 Product와 같은 모델 클래스를 정의하고 이를 List<Product> 형태로 변환하는 것이 좋습니다.

관련된 답변 링크

위 링크에서 ‘Factory’ 패턴이나 ‘fromJson’ 함수 사용에 대한 유용한 정보를 얻으실 수 있습니다. 이러한 정보를 기반으로 객체 안에 객체를 다룰 때의 방향성을 정하실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Isar 마지막 업데이트는 2년전입니다.

0

30

0

FlutterSecureStorage 질문

0

31

0

Dio onError Interceptor 만드는 부분에 질문이 있습니다.

0

79

2

관리자 기능에 대한 질문

0

100

2

part 'restaurant_model.g.dart';

0

92

1

36강. dio 인터셉터에 storage를 전달하는 코드가 이해 안되는데요. 도움 부탁드립니다.

0

56

2

2번 반환 상황 관련 질문

0

61

2

riverpod 3.0

0

139

2

Asset folder??

0

82

2

디자이너와 협업 시 프레임 크기 설정 관련 질문

0

113

2

FutureProvider, StateNotifierProvider 선택 기준

0

70

2

컴포넌트 모델화

0

64

2

쿼리 파라미터

0

84

2

화면 안보임

0

67

2

PaginationListView

0

54

1

강의중 37.Dio onErrorInterceptor 작업하기 dio 관련 질문입니다.

0

101

2

프로토타입이미지

0

62

2

여러 객체를 상태 관리하는 방법에 대한 질문

0

84

2

장바구니 결제하기 응답이 500이 옵니다.

0

105

2

removeFromBasket에서 await patchBasket()을 마지막에 하면 에러나는거 아닌가요?

0

67

2

이 두가지는 완전히 동일한 기능인가요?

0

106

3

내부 코드를 작성하지 않은 CursorPaginationLoading가 어떻게 로딩상태를 갖는지 잘 모르겠습니다...

0

77

2

_SplashScreenState에서 storage를 late로 호출해서 한번만 불러와도 되나요?

0

86

2

코딩 작성 순서 관련 질문

0

88

2