본문 바로가기

오름캠프 flutter과정 정리

21일차(Result패턴) Result 패턴 서버에 데이터 요청시 예상되는 상황 성공 (Success) 실패 (Error, Failure) 네트워크 연결이 아예 안 되어 있음 네트워크 불안정으로 타임아웃 발생 등등 enum은 동등성 및 헤시코드 비교 안되서 한계가 있음 일반적인 클래스 + enum처럼 사용 할 수 있다. 에러처리의 기본 try - catch 본적으로 예외는 try - catch 를 활용하여 처리 한다. 런타임 에러 뿐만 아니라 논리적인 오류나 예외 상황에 대한 처리를 하기에는 부족하다 Result 패턴은 성공, 실패시 처리에 유용한 패턴이다 성공과 실패 중 하나를 리턴하는 Result 클래스 예시 Result 클래스는 성공시에는 데이터를, 실패시에는 Exception(또는 String)을 담는 객체를 정의한다 이 .. 더보기
20일차(네트워크 통신) JSON 개념 서버-클라이언트 통신에서 표준처럼 사용되는 데이터 교환 형식이다. 가볍고 사람이 읽기 쉽다 Map 과 같은 간단한 구조 직렬화 하여 문자열로 나타내기 쉽다 대부분의 언어가 이를 파싱할 수 있기 때문에 상호 운용성은 걱정할 것이 없다 HTTP 개념 HyperText Transfer Protocol 원래 문서 전송용으로 설계된 상태 비저장용 프로토콜 브라우저가 GET 요청으로 웹 서버의 문서를 읽어오는 용도였음 지금은 서버와 클라이언트가 텍스트, 이미지, 동영상 등의 데이터를 주고 받을 때 사용하는 프로토콜로 확장됨 웹 상에서 보는 이미지, 영상, 파일과 같은 바이너리 데이터도 HTTP 멀티파트나 Base64 인코딩하여 사용 HTTP에 전송 계층 보안(TLS: Transport Layer Se.. 더보기
19일차(Dto, Mapper) 서버에서 들어오는 데이터가 변동적이거나 일반적인 값이 들어오지 않을 경우도 있다. DTO 데이터 소스를 모델 클래스로 변환하는 과정에서 순수 하게 클래스에 담기 위한 중간 전달 객체 모델 클래스와 비교하여 어떤 특징이 있는가? 모든 필드가 Nullable 변수 직렬화, 역직렬화 제공 즉, Json을 무지성으로 받아들인다 기존 모델 클래스를 Dto 가 대체 모델 클래스 다시 정리 모든 필드가 non-nullable 상수 직렬화 역직렬화 == hashCode 재정의 toString() 재정의 깊은 복사 제공 copyWith() Json 을 그냥 받지 않고 내 앱에서 필요한 형태로 필드를 수정할 수 있음 데이터 소스의 모양을 확인하지 않고 미리 정의할 수 있음 Dto를 모델로 변환해서 사용해야 함 Mapper.. 더보기
18일차 정리(테스트 코드 작성관련) 기능을 확장하기 위해서는 상속을 해야 하나 확장없이 확장메서드라는 것을 통해서 기능 확장을 할 수 있다 기존에 클래스 설계에 수정을 가하지 않고 기능을 확장가능하다 구조는 extension 메소드명 on 확장대상 클래스명 { } 이다. 기능을 제공하는 클래스는 맴버 변수로 하고 private로 선언한다. 통신과 관련된 try cach는 레포지토리에서 하는게 좋은 이유는 api에서 실제오류가 터지는 것을 확인하고 어플리케이션은 정상적으로 작동하기 위해 api쪽 직접 try cach하면 실제 오류가 터진건지 결과값이 없는 것인지 확인하기 힘들다. ##Unit Test 테스트를 통한 통한 품질향상 테스트를 하는 방법들 => 수동 테스트 : 인간이 하는 테스트 (print) => 단위 테스트 : 1개의 함수를 .. 더보기
17일차 정리 Model Class, Repository Model Class 의 책임과 역할 모델 객체 클래스의 속성에 대한 데이터를 조회할 수 있는 클래스 별도의 기능을 가지지 않는 순수한 클래스 데이터 소스를 앱에 필요한 형태로 변환하여 앱 개발을 편리하게 해 주는 역할 모델클래스는 맴버변수와 생성자가 기본이 되어서 데이터조회를 위한 6종세트가 추가됨 DDD (Domain Driven Design) Domain 의 정의 유사한 업무의 집합 특정 상황(주문, 결재, 로그인)이나 특정 객체(유저, 손님)가 중심이 될 수 있음 모델 클래스 도메인을 클래스로 작성한 것 왜 클래스로 작성해야 할까? 그냥 JSON (Map) 으로 사용하면 안 됨? 최종적으로 활용할 때 좀더 편하게 하기 위해서 모델클래스 사용 ORM ORM.. 더보기
16일차정리(DataSource) 데이터 소스 데이터의 근간이 되는 원천 재료 프로그램이 사용하는 원천 데이터 모든 것이 해당 함 데이터 소스를 활용할 데이터로 변환하자 DataSource 에서 추출한 가공되지 않은 데이터를 -> 사용 가능한 데이터로 변환 DataSource 의 종류 Text File JSON XML CSV RDBMS NoSQL 등등 fromJson , toJson 사용하는 클래스를 모델클래스라고 함 서버에서 보내는 것은 문자열 형태의 Json먼저 Dart의 Map형태로 바꿔야 함 jsonDecode() 함수 jsonDecode() 함수는 Json String 을 Map 으로 변경해 주는 아주 고마운 함수다 잘 기억하도록 그 반대의 함수인 jsonEncode() 도 있음 탑레벨함수라도 import 한 패키지에 as 로별.. 더보기
14일차)(비동기프로그래밍) # 14일차 ListEquality().equals( list1 ,list2 ) 리스트 동등성 비교시 DeepCollectionEquality().equals( list1 ,list2 ) 리스트 중복시 깊게 동등성 비교(맵 셋 도 비교가능) sort 원본변경 sorted 원본변경하지 않고 정렬된 객체 반환 함수형프로그래밍의 장점 ⇒ 변수사용을 줄일 수 있어서 휴먼에러를 줄일 수 있음 ## 비동기 프로그래밍 **동기(sync) 프로그래밍** 코드가 순서대로 실행된다. 작업이 완료될 때까지 프로그램이 중단될 수 없다. 모든 작업은 이전 작업의 실행이 완료될 때까지 기다려야 한다. 동기와 비동기 앱 개발시 비동기프로그래밍 필요하다. 날씨화면 을 불러드리는 과정에서 로딩중이라는 화면을 띄우는 방식이 필요한 경우.. 더보기
11일차 정리(제네릭 열거형 문자열 조작) 제네릭, 열거형 타입이 없을때의 문제점(다이나믹 dynamic) 런타임 에러가 나기 쉽다. IDE가 컴파일 에러를 미리 찾을 수 없다. 제네릭 (Generic) 타입을 나중에 원하는 형태로 정의할 수 있음 타입 안전(type safe) 효과 "List" Map class (꺽쇠) 사이에 제네릭 들어감 리스트 E , 맵 K,V 가 제네릭임 제네릭으로 되어 있는 것들은 타입을 구체적으로 지정해 주어야 한다. 구체적으로 지정해 주지 않는 다면 제네릭이 dynamic 으로 묵시적으로 처리된다. 제네릭 안쓰고 final 쓰면 묵시적으로 dynamic 쓰지 않는다. 제네릭을 활용하여 클래스 만들 시 제약을 추가 하기 위해서 제네릭에 extends 사용가능 class Pocket{ } //해당클래스는 제네릭에 .. 더보기