본문 바로가기

분류 전체보기274

Kotest 알아보기 Kotest Index Kotest Index KoTest란 테스트 스타일 Fun Spec String Spec Should Spec Describe Spec Behavior Spec Word Spec Free Spec Feature Spec Expect Spec Annotation Spec 조건부로 테스트 실행하기 Config Focus Bang X-Method @Ignored @EnabledIf Gradle에서 필터링하기 Isolation Modes SingleInstance InstancePerTest InstancePerLeaf Global Isolation Mode Assertions Style Core Matchers 범용 타입 비교 Iterator Map String Integer, Long.. 2021. 9. 27.
Kotlin DSL + buildSrc 으로 의존성 관리 Kotlin DSL + buildSrc으로 의존성 관리 Kotlin DSL이란? DSL이란 Domain Specific Language의 약어로 특정 분야에 최적화된 프로그래밍 언어를 뜻한다. 상용구 코드를 최소화 하기 위해 명령형 코드 대신 선언적 코드 형식을 따른다. Kotlin DSL은 코틀린의 언어적인 특징으로 가독성이 좋고 간략한 코드를 사용하여 Gradle 스크립팅을 하는 것을 목적으로 하는 DSL이다. Kotlin DSL 장, 단점 장점 IDE 지원 향상된 편집환경 Code highlighting 자동완성 지원 코드 탐색 오류 코드 강조 변수 리펙토링 가능 익숙한 Kotlin언어 사용 러닝 커브 낮음 멀티 모듈 사용 시 중복 의존성 선언 필요 없어짐 단점 빌드 캐시가 Invalidation .. 2021. 9. 27.
Paging3 알아보기 Paging3 Index Paging3 Index Paging3란? 기존 Paging 구현 방식 Paging3 기능 및 장점 핵심 개념 PagingSource load 함수 getRefreshKey 함수 PagingData Paging.flow PagingDataAdapter LoadStateAdapter를 사용하여 Header, Footer 추가하기 구분자(Separator) 추가하기 네트워크 및 데이터베이스에서 페이징(RemoteMediator) Room 설정 Entity 추가 Dao 추가 Database 정의 RemoteMediator 구현 load 함수 구현 Pager 빌더로 PageData flow 생성 Paging3란? 로컬 저장소에서나 네트워크를 통해 대규모 데이터 세트의 데이터 페이지를 로.. 2021. 9. 27.
Hilt로 의존성 주입 시작하기 Hilt로 의존성 주입 시작하기 목차 Dagger 2와 Hilt Hilt는 Dagger 설정 코드를 생성하는 코드로 작동한다. Dagger의 상용구를 제거하고 실제로 개체를 주입할 위치를 정의하는 측면만 남긴다. Hilt 장점 감소된 상용구 분리된 빌드 종속성 단순화 된 구성 향상된 테스트 표준화 된 구성 요소 컴포넌트 컴포넌트 계층 Hilt는 Dagger Component를 직접 정의하거나 인스턴스화 하지 않는다. 대신 Hilt는 사용자를 위해 미리 정의된 구성요소를 제공한다. Hilt는 안드로이드 애플리케이션의 다양한 라이프 사이클에 자동으로 통합되는 Component를 내장하고 있다. 각 Component위의 어노테이션은 각 Component LifeCycle에 대한 바인딩 범위를 지정하는 데 사용.. 2021. 7. 19.
Flutter - 기존 프로젝트 Null Safety로 마이그레이션 하기 Flutter - 기존 프로젝트 Null Safety로 마이그레이션 하기 Flutter 2.0이 릴리즈 되면서 dart 2.12 버전이 적용되어 dart에 Null Safety가 적용되었다. NullSafety로 마이그레이션 하는 과정에 대해서 간단하게 정리해본다. [NullSafety Migration 가이드 문서를 참고하여 작성된 글입니다.] Migration 공식문서 보러가기 Flutter SDK 업데이트 NullSafety는 flutter sdk 2.0부터 지원되니 2.0 이상의 최신 버전으로 업데이트가 필요하다. 먼저 stable채널이 아니라면 stable채널로 변경해야 한다. 현재 채널 확인 > flutter channel Flutter channels: master dev beta * sta.. 2021. 6. 3.
Dart - Null Safety Dart - Null Safety Dart 언어는 이제 Null Safety를 지원한다. Null Safety를 적용하면 코드의 유형은 기본적으로 nullable이 아니다. Null Safety를 적용하면 null에 의한 Exception을 런타임이 아닌 컴파일 타임에 체크하게 된다. Nullable과 Non-Nullable의 구분 기본적으로 선언하는 변수는 Nullable이 아니며, Nullable로 선언할 경우?를 붙인다. int a1=10; int? a2=10; Non-Nullable 변수 선언과 동시에 초기화 필요 Non-Nullable 변수는 선언과 동시에 초기화가 필요하다. 초기화하지 않으면 컴파일 에러가 발생한다. int a1; // compile error int? a2; var 타입에서의.. 2021. 5. 31.
2020 회고 및 2021 신년계획 2020 회고 및 2021 신년계획 2020년 한해를 돌이켜보고 늦었지만 신년계획에 대해서 정리하여보겠습니다 TL;DR 외부 환경은 코로나라는 이슈로 떠들썩했던 한 해였었습니다. 내부적으로는 조금은 안일했던 한 해였던 것 같습니다. Flutter에 몰두한다는 핑계로, 메인인 안드로이드는 많이 뒤처진 것 같습니다 2021년에는 내실을 다지고 스스로 정리하여 많은 기록을 남길 수 있는 해로 거듭나는 것이 목표입니다. 코로나로인한 재택근무 전 국민이 그렇겠지만, 올해는 이 코로나가 나의 생활 전체를 바꾸게 된 가장 큰 사건이었습니다. 한 번도 해보지 않았던 재택근무가 강제되면서 집은 더는 잠만 자는 곳이 아니게 되었고, 창고 역할을 하던 책상은 점점 사무실의 모형을 갖추어갔습니다. 의자, 발 받침대, 키보드,.. 2021. 1. 13.
[Git] 좋은 커밋 메세지 작성하기위한 규칙들 좋은 커밋 메시지 작성하기 위한 규칙들 코드를 작성하면서 어려운것들중 하나는 이름을 어떻게 짓는지에 대한 고민 바로`Naming` 일 것입니다. 클래스, 함수, 변수 등등 많은 이름을 고민하지만 그 중 하나인 커밋 메시지를 어떻게 작성하여야 좋은 커밋 메시지일지에 대하여 알아보도록 하겠습니다. 커밋 메시지의 7가지 규칙 1. 제목과 본문을 빈 행으로 구분한다 2. 제목을 50글자 내로 제한 3. 제목 첫 글자는 대문자로 작성 4. 제목 끝에 마침표 넣지 않기 5. 제목은 명령문으로 사용하며 과거형을 사용하지 않는다 6. 본문의 각 행은 72글자 내로 제한 7. 어떻게 보다는 무엇과 왜를 설명한다 커밋 메시지 구조 헤더는 필수이며, 범위(scope), 본문(body), 바닥글(footer)은 선택사항입니다.. 2021. 1. 12.
[앱개발후기] Flutter로 2개의 앱을 개발하다 (2편) Flutter에 관하여서 막연한 관심만 가지고 있다가 직접 경험할 수 있는 좋은 기회가 되어 2개의 앱을 개발하였고 론칭하게 되었습니다. 아무것도 몰랐던 바닥부터 Flutter에 대하여 공부하고, 조사하고 런칭하게 되기까지 개발 후기 2편에 대하여 적어보고자 합니다 🚀 [앱 개발 후기] Flutter로 2개의 앱을 개발하다 1편 보러 가기 beomseok95.tistory.com/322 [앱개발후기] Flutter로 2개의 앱을 개발하다 (1편) 2020년 초에 뜨거운 감자라고 생각되었던 Flutter 직접 경험할 수 있는 좋은 기회가 되어 2개의 앱을 개발하고 론칭하게 되었습니다. 아무것도 몰랐던 바닥부터 론칭하게 되기까지 개발 후기에 대 beomseok95.tistory.com Index Bleet(.. 2021. 1. 8.
[앱개발후기] Flutter로 2개의 앱을 개발하다 (1편) Flutter에 관하여서 막연한 관심만 가지고 있다가 직접 경험할 수 있는 좋은 기회가 되어 2개의 앱을 개발하였고 런칭하게 되었습니다. 아무것도 몰랐던 바닥부터 Flutter에 대하여 공부하고, 조사하고 런칭하게 되기까지 개발 후기에 대하여 적어보고자 합니다 🚀 Index Mybiskit(마이비스킷) Flutter 첫 번째 앱 Mybiskit 개발 시작 GDG / Flutter Korea MeetUp에서 발표를 보거나, 각종 사이트의 Flutter관련 글을 보며 Flutter가 무엇인지에 대하여 관심과 궁금증이 생기던 2019년 말쯤.. 좋은 기회가 찾아오게 되었습니다. 그건 바로 회사에서 기존에 웹만 존재하던 서비스를 Flutter로 개발하여 앱으로 런칭할지도 모른다는 것! 이것을 계기로 회사 팀 내.. 2020. 12. 30.
RxDart에 대하여 알아보기 RxDart에 대하여 알아보기 이번 포스트에서는 RxDart에 대하여 자세하게 알아보려 합니다 목차 Table of Contents RxDart를 알아보기 전에 RxDart는`dart:async`패키지의 Dart Streams를 대체하기 위해 자체 Observable 클래스를 제공하지 않습니다. 기본 제공되는 `dart:async`패키지의 Stream 및 StreamController에 확장 기능을 구현한 것입니다. ✏️기본 제공되는 훌륭한 Stream API를 먼저 확인해보는 것을 추천합니다! 표준 Rx와 RxDart(Stream API) 비교해보기 많은 상황에서 Streams와 Observable은 같은 방식으로 하지만 표준 Rx에 익숙하다면 RxDart(with Stream API)의 일부 기능이 .. 2020. 8. 13.
Flutter Animation(플러터 애니메이션) - 1 (암시적 애니메이션) Flutter Animation(플러터 애니메이션) - 1 (암시적 애니메이션) 오랜만에 포스트를 작성하게 되었네요. 이번 포스트에서는 Flutter Animation에 대하여 알아보겠습니다. 목차 Table of Contents 암시적 애니메이션(Implicit Animation) Flutter의 애니메이션 라이브러리를 사용하면 UI에서 위젯에 모션을 추가하고 시각 효과를 만들 수 있습니다. 위 라이브러리에 설정된 하나의 위젯이 애니메이션을 관리합니다. 이러한 위젯을 통칭하여 암시 적 애니메이션 또는 암시 적으로 애니메이션 된 위젯이라고 하며, ImplicitlyAnimatedWidget 클래스를 구현합니다 ✨암시적 애니메이션 위젯들은 자동으로 변경사항을 애니메이션 합니다 특징 ⚡ 애니메이션을 사용하면.. 2020. 3. 31.
Flutter(플러터)가 Dart(다트)언어를 사용하는 이유 Flutter(플러터)가 Dart(다트) 언어를 사용하는 이유 오랜만의 포스팅으로 돌아왔습니다! 이 글에서는 Flutter가 Dart언어를 어째서 사용하는지 이유에 대하여 알아보도록 하겠습니다. Flutter(플러터)와 Dart(다트) Flutter팀에서 초기 언어를 선택할 때 12개 이상의 언어를 평가하였다고 합니다. 그중 UI 구축 방식이 Dart와 가장 일치하여 Dart를 선택하게 되었다고 합니다. Dart는 2011년 Java Script를 대체하기 위해 발표되었습니다. 하지만 아래와 같은 이유로 인하여 많이 사용되지 않았습니다. 다트가 그동안 외면받아왔던 이유 ❗JS를 대체하기 위해서라면 TypeScript 등의 다른 언어를 사용할 수 있었음 ❗Dart는 언어적 특성이 그렇게 세련되어 보이지 않.. 2020. 2. 2.
Flutter - WidgetTest(위젯 테스트) 작성해보기 Flutter - WidgetTest(위젯 테스트) 작성해보기 flutter_test 패키지를 사용하여 widget을 test 하는 방법에 대하여 알아보도록 하겠습니다. 목차 Table of Contents flutter_test package 위젯 클래스를 테스트하려면 flutter_testFlutter SDK와 함께 제공되는 패키지에서 제공하는 몇 가지 추가 도구가 필요합니다. flutter_test패키지는 위젯을 테스트하기 위해 다음과 같은 도구를 제공합니다 - WidgetTester 구축하고 테스트 환경에서 위젯과 상호 작용할 수 있습니다. - testWidgets() 함수를 이용하여 일반 test() 함수 대신 사용합니다. - Finder클래스는 테스트 환경에서 위젯을 검색할 수 있습니다. - .. 2019. 12. 17.
Dart - Test 작성하기(test package) Dart - Test 작성하기(test package) dart의 test package를 사용하여 테스트를 작성하는 방법에 대하여 알아보도록 하겠습니다 목차 Table of Contents test package https://pub.dev/packages/test#writing-tests test | Dart Package A full featured library for writing and running Dart tests. pub.dev test package는 Dart에서 테스트를 작성하고 실행하는 표준 방법을 제공합니다. 테스트 실행하기 1. 단일 파일 테스트 실행하기 pub run test [test file] //exsample pub run test test/first_test.dart.. 2019. 12. 13.
Flutter - BLoC 패턴 알아보기 Flutter - BLoC 알아보기 BLoC 패턴에 대하여 알아보도록 하겠습니다. 목차 Table of Contents BLoC 패턴이란? BLoC (business Logic Component)는 파올로 소아레스와 콩 후이라는 개발자에 의해 디자인되었고 2018년 DartConf에서 발표되었습니다. BLoC는 Presentation Layer와 business Logic을 분리하여 코드를 작성할 수 있도록 해줍니다. BLoC는 스트림을 이용하여 만들어집니다. 위젯은 Sinks (입구)를 통하여 BLoc에 이벤트를 보냅니다. BLoC객체는 위젯으로부터 이벤트를 전달받으면 필요한 Repository 등으로부터 데이터를 전달받아 business Logic을 처리합니다. business Logic을 처리한 후.. 2019. 12. 13.
Flutter - Row,Column정렬하기 (MainAxisAlignment, CrossAxisAlignment) Flutter - Row, Column 정렬하기 (MainAxisAlignment, CrossAxisAlignment) axis는 중심선이라는 뜻입니다. crossaxis 횡축, mainaxis는 주축 이라는 뜻으로 해석할 수있습니다. 그렇다면 MainAxixAlignment와 CrossAxisAlignment 속성을 사용하여 행(row) 또는 열(column)에서 child widget을 어떻게 정렬할 수 있을까요 ? MainAxixAlignment와 CrossAxisAlignment을 사용하여 Row , Column에서 정렬하는 방법에 대하여 알아보도록 하겠습니다. 목차 Table of Contents 위젯 정렬하기 (Aligning Widgets) - 행(Row)의 경우 주축은 가로를 기준으로 합니.. 2019. 12. 2.
Dart 언어 Future 알아보기 Dart 언어 Future 알아보기 dart future에 대하여 자세히 알아보겠습니다. dart dev의 내용을 한글로 번역한 글입니다. https://dart.dev/codelabs/async-await Asynchronous programming: futures, async, await Learn about and practice writing asynchronous code in DartPad! dart.dev 목차 Table of Contents future란? future는 비동기 작업의 결과를 나타내며 미완료(value를 생성하기 전)또는 완료(value 생성)의 두 가지 상태를 가질 수 있습니다. - 미완성 비동기 함수를 호출하면 완료되지 않은 미래가 반환됩니다. 미래에는 함수의 비동기 작.. 2019. 11. 25.
Dart 언어 Stream 알아보기(Dart 비동기 프로그래밍) Dart 언어 Stream 알아보기(Dart 비동기 프로그래밍) Dart 언어의 Stream에 대하여 알아보겠습니다. 목차 Table of Contents Stream 이란?? 스트림은 데이터나 이벤트가 들어오는 통로입니다. 앱을 만들다 보면 데이터를 처리할 일이 많은데, 어느 타이밍에 데이터가 들어올지 확실히 알기 어렵습니다. 스트림은 이와 같은 비동기 작업을 할 때 주로 쓰인다. 예컨대 네트워크에서 데이터를 받아서 UI에 보여주는 상황을 생각해보면, 언제 네트워크에서 데이터를 다 받을지 알기 어렵습니다. 신호가 약한 와이파이를 쓸 수도 있고, 빵빵한 통신을 쓰고 있을 수도 있다. 이런 문제를 스트림은 데이터를 만드는 곳과 소비하는 곳을 따로 둬서 이 문제를 해결할 수 있습니다. 스트림이란 데이터의 추.. 2019. 11. 25.
Dart 언어 컨벤션 알아보기 Dart 언어 컨벤션 알아보기 https://dart.dev/guides/language/effective-dart Effective Dart Best practices for building consistent, maintainable, efficient Dart libraries. dart.dev 다트 공식 문서의 Effective Dart를 한국어로 해석한 글입니다. 목차 Table of Contents 개요 지난 몇 년 동안, 우리는 많은 Dart 코드를 작성했으며 잘 작동하는 것과 그렇지 않은 것에 대해 많은 것을 배웠습니다. 일관되고 강력하며 빠른 코드도 작성할 수 있도록 이를 공유하고 있습니다. 두 가지 중요한 주제가 있습니다. 1. 일관성을 유지하십시오. 형식화 및 케이스와 관련하여 어떤 .. 2019. 11. 24.
Dart 다트언어에 대하여 알아보기 다트 Dart 다트 언어에 대하여 알아보기 다트 언어에 대하여 알아보도록 하겠습니다. 아래의 다트 Document 원문에 대한 내용입니다. https://dart.dev/guides/language/language-tour#class-variables-and-methods A tour of the Dart language A tour of all of the major Dart language features. dart.dev 목차 Table of Contents 왜 다트를 해야할까 ? 다트는 구글이 자바스크립트를 대체하기 위해 2011년 개발한 웹 프로그래밍용 언어이지만 2018년이 될 때까지 배울 필요가 없는 프로그래밍 언어 중 하나로 여겨졌다. 하지만 다트는 새로운 프로그래밍 언어로, 나날이 큰 인.. 2019. 11. 21.
ConstraintLayout 알아보기 ConstraintLayout 알아보기 ConstraintLayout에 대하여 샘플 코드와 함께 알아보도록 하겠습니다. 목차 Table of Contents ConstraintLayout이란? 복잡한 레이아웃을 단순한 계층 구조를 이용하여 표현할 수 있는 ViewGroup입니다. 즉 복잡한 계층구조로 레이아웃을 구성하는 방식에서 자유로워질 수 있습니다. 형제 View들과 관계를 정의해서 레이아웃을 구성한다는 점이 RelativeLayout과 비슷하지만, 보다 유연하고 다양한 기능을 제공합니다. ConstrinatLayout을 사용하면 어떤점이 좋을까?? 복잡한레이아웃 계측구조를 단순히 구성하여 작성할 수 있습니다. 자식뷰 간의 상호관계를 정의가능합니다 ex) 두 View를 위 아래로 컨테이너 중앙에 배치.. 2019. 11. 16.
JUnit 5 알아보기 JUnit 5 알아보기 JUnit 5에 대하여 알아보도록 하겠습니다. 목차 Table of Contents JUnit 5란 ?? 이전버전의 JUnit과 다르게 JUnit 5는 세가지 하위 프로젝트의 여러 모듈로 구성됩니다 JUnit5 = JUnit Platform + JUnit Jupiter + Junit Vintage JUnit Platform : 테스트를 발견하고 테스트 계획을 생성하는 TestEngine 인터페이스를 가지고 있습니다. Platform은 TestEngine을 통해서 테스트를 발경하고 ,실행하고 ,결과를 보고합니다. JUnit Jupiter : TestEngine의 실제 구현체는 별도 모듈입니다. 모듈 중 하나가 jupiter-engine입니다. 이 모듈은 jupiter-api를 사용해.. 2019. 11. 5.
@BeforeClass, @AfterClass ,@Before,@After 순서 알아보기 @BeforeClass, @AfterClass ,@Before,@After 순서 알아보기 Junit에 @BeforeClass, @AfterClass ,@Before,@After 어노테이션이 있습니다. 이전 이후..? 뭐지 어떻게 호출되는건지 알아보도록 하겠습니다. Example class BeforeAfterTest { @Before @Throws(Exception::class) fun setUp() { println("@Before") } @After @Throws(Exception::class) fun tearDown() { println("@After") } @Test @Throws(Exception::class) fun testCase1() { println("testCase1") } @Test .. 2019. 11. 1.