강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

mhlee님의 프로필 이미지
mhlee

작성한 질문수

Flutter 중급 2편 - 실전 앱 개발 - 미국 주식 앱 (with 클린 아키텍처)

회사 정보 Json 파싱

DTO 작성시 freezed 3.0 변경 부분 문의

작성

·

77

0

이전 강의에서 freezed 3.0 변경점으로 default 사용시 일반 생성자 초기화하듯 사용하는 방법으로

진행해도 된다고 하셨는데

 

@JsonKey 사용법도 기존 생성자 작성과 동일하기 하고 아래 *참고소스1과 동일하게 진행해도 되는지 문의드립니다.

 

참고소스1

import 'package:freezed_annotation/freezed_annotation.dart';

part 'company_info_dto.freezed.dart';
part 'company_info_dto.g.dart';

// ignore_for_file: annotate_overrides
@freezed
@JsonSerializable()
class CompanyInfoDto with _$CompanyInfoDto {
  @JsonKey(name: 'Symbol')
  final String? symbol;
  @JsonKey(name: 'Name')
  final String? name;
  @JsonKey(name: 'Description')
  final String? description;
  @JsonKey(name: 'Industry')
  final String? country;
  @JsonKey(name: 'Country')
  final String? industry;
  const CompanyInfoDto({
    this.symbol,
    this.name,
    this.description,
    this.industry,
    this.country,
  });

  factory CompanyInfoDto.fromJson(Map<String, dynamic> json) =>
      _$CompanyInfoDtoFromJson(json);
  Map<String, dynamic> toJson() => _$CompanyInfoDtoToJson(this);
}

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

답변 2

1

오준석님의 프로필 이미지
오준석
지식공유자

네. 이렇게 하시면 됩니다.


아니면 DTO 는 freezed 안 쓰고 json to dart 플러그인으로 만드는게 오히려 편하고 빌드 시간도 줄일 수 있습니다.

freezed 가 copyWith, toString, == 재정의를 도와주는데 DTO 는 다 필요가 없고 fromJson, toJson 이 있는 모든 필드가 Nullable 인 객체면 되기 때문입니다.

mhlee님의 프로필 이미지
mhlee
질문자

감사합니다

0

안녕하세요, 인프런 AI 인턴입니다.
mhlee님께서 질문하신 내용과 관련하여 freezedJsonKey 사용법에 관해서 안내해 드리겠습니다.

문제의 핵심

freezed 3.0 버전에서는 데이터 클래스를 생성할 때 변경된 점이 몇 가지 있습니다. 특히, JsonKey 사용법은 freezed의 기능을 통해 자동으로 toJsonfromJson 메서드를 생성할 수 있도록 구성됩니다.

주요 사항

  1. @freezed@JsonSerializable() 조합: freezed 플러그인과 json_serializable의 경우 서로 호환됩니다. 따라서 @JsonSerializable()를 클래스에 사용할 수 있으며, 이는 자동으로 JSON (de)serialization 기능을 추가해줍니다.

  2. 생성자와 JsonKey 사용:

    • JsonKey는 직렬화와 역직렬화 시에 JSON 파일의 키 이름을 지정하는 데 사용됩니다.
    • 현재 작성하신 예시는 적합하게 사용되고 있으며, @JsonKey 어노테이션을 통해 JSON 키를 지정하는 것은 올바른 방법입니다.

코드 설명

@JsonKey(name: 'Symbol')
final String? symbol;

위와 같은 방식으로 @JsonKey 어노테이션을 사용하여 JSON에서 특정 키 이름(Symbol)을 사용하도록 설정할 수 있습니다. 이는 JSON이 인식할 수 있는 적절한 이름을 제공하여 변환 시 데이터의 정확성을 높일 수 있습니다.

참고할 만한 자료

작성하신 소스 코드는 올바른 구성으로 보입니다. 이 방식으로 진행하시면 됩니다. 추가적인 궁금증이 있으시면 언제든지 질문해 주세요!

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

mhlee님의 프로필 이미지
mhlee

작성한 질문수

질문하기