문제당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다. 예를 들어 연구실에 총 4마리의 폰켓몬이 있고, 각 폰켓몬의 종류 번호가 [3번, 1번, 2번, 3번]이라면 이는 3번 폰켓몬 두 마리, 1번 폰켓몬 한 마리, 2번 폰켓몬 한 마리가 있음을 나타냅니다. 이때, 4마리의 폰켓몬 중 2마리를 고르는 방법은 다음과 같이 6가지가 있습니다.첫 번째(3번), 두 번째(1번) 폰켓몬을 선택첫 번째(3번), 세 번째(2번) 폰켓몬을 선택첫 번째(3번),..
테스트는 문서다 테스트는 문서다 - 프로덕션 기능을 설명하는 테스트 코드 문서 - 다양한 테스트 케이스를 통해 프로덕션 코드 이해하도록 도와줌 - 한 사람의 경험을 팀 차원으로 모두 공유 가능 우리는 항상 팀으로 일하기 때문에 좋은 테스트 코드를 문서로 작성해야한다 DisplayName을 섬세하게 @DisplayName("음료 1개 추가하면 주문 목록에 담긴다") // 테스트명을 적어준다 @Test void add(){ CafeKiosk cafeKiosk = new CafeKiosk(); cafeKiosk.add(new Americano()); assertThat(cafeKiosk.getBeverages().get(0).getName()).is..
서론 Test Driven Development 란?- 구현먼저 하는 것이 아니라 테스트를 먼저하고 기능을 구현하는 개발 방법론 1) 실패하는 테스트 작성 2) 테스트 통과 최소한의 코딩 : 통과하기 위해 막 짜도 괜찮 일단 통과만 하도록 짜라3) 구현 코드 개선 , 테스트 통과 유지 : 구현 코드를 개선하면서 품질 향상 본문 1단계 - 빨간불 보기 // 컴파일 에러 방지용 기능 구현 public int calculateTotalPrice(){ return 0;}// 빨간색 불 들어오는 테스트코드@Testvoid calculateTotalPrice(){ CafeKiosk cafeKiosk = new CafeKiosk(); Americano americano = new America..
서론 테스트는 간편하게 해야하고 기계가 알아서 통과 여부를 확인할 수 있게 짜야한다.수동 테스트처럼 일일이 화면 클릭해서 확인하고 감에 의존해서 합격 불합격하는 테스트는 신뢰성이 낮다 이게 괜찮은 테스트 코드인가? @Test void add() { CafeKiosk cafeKiosk = new CafeKiosk(); cafeKiosk.add(new Americano()); System.out.println(" == 담긴 음료수 수 : " + cafeKiosk.getBeverages().size()); System.out.println(" == 담긴 음료수 : " + cafeKiosk.getBeverages().get(0).getName()..
서론 테스트는 왜 필요하니? - 조미료 같은 놈 - 사실 서비스에 직접적인 영향을 주진 않지만 있다면 품질의 안정성을 보장해주고, 좋은 테스트 코드는 유지보수 시간을 단축 시킨다 - 다만 스케줄이 빠듯한 경우 테스트 코드 작성이 매우 귀찮은 작업이 되어버림 본문 이미 수동으로 테스트가 끝난 코드가 있는데 여길 다른 사람이 조금만 수정한 경우가 있다. 근데 이게 이미 테스트 했던 기존 영역을 한 번 침범하니까.. 기존 꺼가 정상적으로 동작하는지 또 또 테스트 해야하는 아주 비생산적인 활동을 하게 된다.... 특히 테스트코드 없이 수동으로 하다보면 사람의 실수가 생기고 유지보수가 어려워지는 악순환이 발생한다. 테스트 코드를 작성한다면 ? 1. 빠른 피드백 : 코드만 실행하고 결과만 보면 되니..
구글 애드몹- 구글에서 제공하는 광고 서비스- 누구나 광고를 게시하고 수익을 올릴 수 있음 google_mobile_ads - 해당 플러그인을 사용해서 구글 애드몹을 게시 가능 https://pub.dev/packages/google_mobile_ads google_mobile_ads | Flutter packageFlutter plugin for Google Mobile Ads, supporting banner, interstitial (full-screen), rewarded and native adspub.dev 아래 링크에서 구글 계정으로 로그인 후에 설정 가능 http://admob.google.com/ AdMob이메일 또는 휴대전화accounts.google.com 게시하는 광고의 경우 각..
인증 - 서버와 통신하는 사용자의 정보와 유효성 검증 - 이전에서는 그냥 로컬에서 사용을 했으니까 괜찮았는데 서버와 연결하면 해당 인증 절차는 복잡해진다. 왜냐하면 사용자가 나 뿐만이 아니라 다른 사용자의 데이터도 존재하기 때문에 해당 데이터를 구분하고 요청에 맞는 데이터를 반환하는 것이 중요 JWT - 사용자 요청을 확인할 때마다 아이디 비번 입력하게 만들면 그 서비스 불편해서 아무도 안 쓴다 - 그런거 없이 JWT를 사용해서 인증을 처리 - 액세스토큰 ( 정보 접근 시 사용 ) , 리프레스 토큰 ( 액세스 토큰 만료시 사용 ) 으로 구성 class AuthRepository { final _dio = Dio(); final _targetUrl = 'http://${Platform.isAndroid ?..
파이어 베이스 - 구글이 제공하는 앱 개발 최적화 기능 제공 서비스 파이어 스토어 - 파이어 베이스 기능 중 하나 - NoSQL 데이터 베이스 - 서버 인프라 관리를 알아서 해주니까 공수가 많이 줄어든다 - SDK를 활용하여 보다 직관적인 프로그래밍이 가능 - 다만 무료 사용량이 있고 그것보다 더 사용하면 결제가 필요 - JSON 형식을 그대로 저장할 수 있음 // 파이어 베이스 초기화 await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); // 스케쥴 모델을 그대로 파이어베이스에 저장 await FirebaseFirestore.instance .collection( 'schedule', ) .doc(schedul..
1) SQL - 웹이랑 똑같이 앱에서도 데이터베이스를 사용할 때 큰 틀은 같음 - 테이블 구조로 이루어져 있으며 행과 열로 구분 - 여기선 드리프트 플러그인을 사용하여 SQL을 구현 - ORM이라고 객체 - 관계 매핑을 활용해서 SQL문을 일일 작성하지 않고 코드를 통해서 구현이 가능해짐 2) 드리프트 - ORM으로 SQL을 작성하여 코드로 테이블 데이터를 조작 가능하게 해주는 라이브러리 - 기본적인 틀을 코드로 정의하고 메서드를 정의하면 자동적으로 알아서 SQL관련된 코드를 작성해주고 우리는 메서드나 변수를 사용해서 해당 테이블에 있는 레코드를 제어할 수 있다. // private값까지 불러올 수 있음 part 'drift_database.g.dart'; // part 파일 지정 @DriftDataba..
1) DIO - http 요청을 하는 일반적인 메서드들을 제공 - 어플리케이션에서 요청을 하고 서버에서 응답을 받아서 서로 통신을 하는데 이 때 사용되는 라이브러리 2) Json - 키 - 값 형태로 이루어진 데이터 객체 포맷 - xml도 있지만 대부분 json 형태의 데이터 포멧을 사용하여 API를 설계 3) 키보드 높이 구하기 - 키보드가 올라오면 해당 키보드의 크기 만큼 어플의 레이아웃이 망가져 버림 - 키보드의 높이를 미리 세팅해두고 키보드가 나오면 해당 크기만큼 화면 늘려서 비율 유지시켜주기 @override Widget build(BuildContext context) { final bottomInset = MediaQuery.of(context).viewInsets.bottom; return..