내배캠 33일차_Flutter 실무숙련 (Core특강)


 1. Flutter 실무 숙련


CORE반 특강 복습   <JSON>

import 'dart:convert';

void main() {
String jsonString = """
[
{
"name": "홍길동",
"color": "파란색",
"size": "L",
"type": "반팔",
"quantity": 2
},
{
"name": "이길동",
"color": "블랙",
"size": "S",
"type": "긴팔",
"quantity": 1
}
]
""";

final parsed = jsonDecode(jsonString);
print(parsed);

for (var item in parsed) {
//Map<String, dynamic> map = item;
//
print(
'${item["name"]}님이 ${item["color"]} ${item["size"]}사이즈 ${item["type"]}${item["quantity"]}개 구매하셨습니다.',
);
}
}


1)JSON 데이터를 디코드(jsonDecode)하기 위해 dart:convert 라이브러리를 불러온다.


2) JSON 형식의 문자열을 만든다. """ 는 여러줄 문자열을 표현할 때 사용하는 문법이다.

JSON은 List 형태이며, 내부에는 Map이 들어있음


[참고]

Parsing : 문자열을 분석해 의미있는 데이터 구조로 바꾸는 전체과정 (역직렬화 포함 가능)

Mapping: 보통 JSON의 key-value -> 클래스의 필드에 대응시키는 작업

직렬화 : 객체 -> JSON 문자열 / 역직렬화 : JSON -> 객체



3) jsonDecode()로 문자열을 실제 Dart객체로 변환

parsed는 List<dynamic>타입


print(parsed) 결과

[{name: 홍길동, color: 파란색, size: L, type: 반팔, quantity: 2}, {name: 이길동, color: 블랙, size: S, type: 긴팔, quantity: 1}]



4)리스트의 각 요소(Item)를 순회하면서 원하는 필드만 골라 출력
이때 item은 Map<String, dynamic>이므로 item["키 이름"]으로 접근이 가능함.


print 결과

홍길동님이 파란색 L사이즈 반팔을 2개 구매하셨습니다.

이길동님이 블랙 S사이즈 긴팔을 1개 구매하셨습니다.





CORE반 특강 복습   <API>

API는 두 소프트웨어 구성요소가 서로 통신할 수 있게 하는 메커니즘이다.

서버에서 클라이언트(우리기준으로 앱)에서 사용하라고 만들어 놓은 일종의 데이터 인터페이스이다.

서버에서 특정 주소(Url)를 제공하고, 우리가 앱에서 이걸 호출하면 데이터를 받을 수 있는 형태이다.




HTTP

HTTP 통신은 두 가지 큰 개념이 있다.

Request (요청) : 인터넷 브라우저 주소창에 주소를 입력하는 행위도 해당됨.

Response (응답) : 요청에 따른 응답이 들어옴.


요청 방식에는 몇 가지 메서드가 존재하는데, 제일 중요한 2가지. get과 post

get: 주소창에 입력하는 방식

post: 값을 전달할 때 바디를 만들어서 보이지 않게 전달. 전송데이터가 외부에 드러나지 않아 보안에 유리



https://pub.dev/packages/http/install

http 패키지 사용하기 위해 pubspec.yaml에 패키지를 추가

dependencies:

  http: ^1.5.0




Response(응답)을 받고나서, 우리가 첫 번째로 확인할 것은 상태 코드이다.

중요! Response는 항상 상태코드를 전달해준다.

Response status: 200 (200번대 요청 성공 / 400번대 클라이언트 오류 / 500번대 서버오류)



*실습해보기- 서울시 공동육아나눔터 시설 현황데이터 활용

import 'dart:convert';
import 'package:http/http.dart' as http;

main() async {
//http 패키지를 활용
var url = Uri.parse(
'http://openapi.seoul.go.kr:8088/727646464f63686f31323962416c6b57/json/TnFcltySttusInfo1004/1/20/',
);
var response = await http.get(url);
//print('Response status: ${response.statusCode}');
//print('Response status: ${response.body}');

var jsonString = response.body; //여기서 대입

// JSON 문자열을 Dart 객체로 파싱
final parsed = jsonDecode(jsonString);
// print(parsed);

final result = parsed['TnFcltySttusInfo1004'];
//print(result);

final list = result['row'];
// print(list);

for (var contents in list) {
//Map<String, dynamic> map = contents;
//print(contents);
print(contents['FCLTY_NM']);
}
}

링크:

https://data.seoul.go.kr/dataList/OA-20968/S/1/datasetView.do

http://openapi.seoul.go.kr:8088/727646464f63686f31323962416c6b57/json/TnFcltySttusInfo1004/1/20/


데이터가 여러번 감싸져있는 형태, 리스트, 맵, 리스트, 맵 - 토글형태처럼 이루어져 있음.

Map에서 필요한 데이터를 꺼낼 때는 ['key'] 값으로 꺼냄.

List에서 필요한 데이터를 꺼낼 때는 for 문을 활용해서 꺼냄





2. 인사이트 클럽

테슬라와 스페이스X CEO 일론 머스크처럼 시간 관리하기, 타임박싱 | 일하는 우리 |


오늘의 주제는 '시간관리'였다.

시간관리는 일의 효율을 내기 위해 중요하다.


인사이트클럽을 통해 다른 분들의 의견을 들어보고 내가 적용해보고 싶은 것은


하루에 무조건 꼭 해야할 일 1~3가지는 정해놓고 꼭 마무리 할 것

쉬는시간도 함께 정해놓고 진행할 것


개인적으로는 전환비용이 많이 드는 편이어서

이걸 줄이는 것도 시간효율을 내는 것에 도움이 될 것 같다.

의식하고 있으면 그래도 관리를 할 수 있지만,

점점 에너지와 집중력이 낮아질 수록 전환비용이 더 증가하는 것 같다.


시간관리를 잘 하기 위해서는 기본적으로 컨디션 관리가 잘 되어야 할 것 같다.




댓글

이 블로그의 인기 게시물

내배캠15일차_map() reduce() fold()

내배캠16일차_Flutter_스토어 앱 만들기

내배캠 [3주차 WIL]