분류 전체보기 (103) 썸네일형 리스트형 Build Logic 모듈에는 build.gradle이라는 파일이 포함되어 있다.멀티 모듈을 사용하기 위해 모듈을 생성하면 따로 추가하지 않아도 build.gradle 파일이 포함되어 생성되며, 추가 된 모듈은 settings.gradle 파일에 include: 모듈 형식으로 자동으로 추가된다.Gradle - Groovy 언어를 기반으로 한 오픈소스 빌드 도구 빌드도구 - 애플리케이션 생성을 자동화 하기 위한 프로그램 빌드 과정을 간단히 요약하자면 다음과 같다.settings.gradle이 먼저 실행되고, 정의 된 각각의 모듈에 대한 Project 인스턴스를 생성한다.이후 각 모듈의 Project 인스턴스를 통해 빌드 설정을 진행하게 되는데, Project 인스턴스를 사용하는 부분이 바로 모듈 내에 있는 build.gradl.. 멀티 모듈 모든 클래스는 각자의 역할이 뚜렷하게 존재한다.대표적인 예로 ViewModel은 UI의 상태를 관리하기 위한 클래스로, UI 상태를 제외한 나머지는 알 필요가 없다. 그러나 데이터베이스에서 데이터를 가져오기 위해 Repository를 사용해야 하기 때문에 추상화 된 Repository를 DI를 통해 주입받아 사용하곤 한다.이처럼 각자의 역할을 정의하고 이를 의존성 주입을 통해 관리하게 되는데, 하나의 모듈에서 프로젝트를 구현하다 보면 본인도 모르는 사이에 각 코드간의 의존성이 높아지고, 나중에는 클래스마다 복잡한 관계를 갖게 되는 경우가 생기게 된다. 1. 멀티 모듈멀티 모듈을 사용하면 위와 같은 문제를 어느 정도 개선할 수 있다.역할 및 기능 별로 모듈을 생성, 관심사 분리를 통해 유지보수 및 재사용성.. [EditText] 날짜 입력하기 with Flow 개인 프로젝트에서 날짜를 입력하는 화면이 있다.조건시작일은 필수로 입력해야 하며, 종료일은 선택할 수 있다.EditText가 형식에 맞게 채워지면 초록색 테두리로 변한다.화면에 주어진 EditText가 모두 YYYY-MM-DD 형식으로 채워져야 등록버튼이 활성화된다.날짜 범위가 올바르지 않다면 Toast Massage 알림 상태 정의class DateViewModel: ViewModel() { private val _startDate = MutableStateFlow("") val startDate = _startDate.asStateFlow() private val _endDate = MutableStateFlow("") val endDate = _endDate.asStateFlo.. AppWidget - View 구성 요소Widget LayoutAppWidgetProviderInfoAppWidgetProviderRemoteViewsWidget LayoutWidget은 기본적으로 RemoteViews를 사용한다.RemoteViews에 사용할 수 있는 View는 제한적인데, 종류는 다음과 같다.이를 이용하여 아래와 같은 간단한 위젯을 만들 수 있다. RemoteViews에 사용할 수 있는 View와 Layout을 사용하여 자유롭게 Widget을 디자인 할 수 있지만, Widget의 크기를 고려하여 구현해야 한다. AppWidgetProviderInfoAppWidgetProviderInfo는 Widget의 필수 속성들을 정의하며, XML로 구현할 수 있다.(해당 파일의 경로는 res/xml/ 에 저장한다.) .. Navigation Component 기존에 Fragment를 사용하기 위해선 FragmentManager를 사용하여 Fragment에 필요한 작업들을 수동적으로 처리해줘야 했다.fragmentManager = supportFragmentManagerval transaction = fragmentManager .beginTransaction() .addToBackStack(name)transaction.replace(R.id.nav_host_fragment_content_main, fragment).commit() Jetpack의 Navigation Component는 이러한 부분들을 좀 더 쉽고 간편하고 직관적으로 사용 할 수 있도록 도와주는 라이브러리이다. 구성 요소Na.. Fragment Activity는 사용자 인터페이스를 제공하고 사용자와의 상호작용을 담당하는 컴포넌트이다.Fragment는 하나의 Activity에 여러가지 화면을 보여주고 싶은 경우 사용한다. 대표적으로 BottomNavigatin을 예로 들 수 있는데, 하단의 메뉴를 클릭할 때마다 화면 전체가 아닌 중간 화면만 메뉴에 맞는 화면으로 변경되는 것을 볼 수 있다. Fragment LifecycleFragment에는 Attach와 Detach가 추가로 있는데, 이 2가지를 포함하여 실행 순서를 보면 다음과 같다.onAttach → onCreate → onCreateView → onViewCreated → onStart → onResume → onPause → onStop → onDestroyView → onDestroy.. [View] Progress Bullet Point 이전에 구현한 Bullet Point를 바탕으로 잔행 상태를 나타내는 Progress Bullet Point를 구현해보자.https://snaildeveloper.tistory.com/145 [View] 글 머리 (Bullet Point) 만들기TODO 앱 개인 프로젝트를 리팩토링하면서 나의 일정 목록을 좀 더 직관적으로 보여주고 싶었다.그래서 나만의 Bullet Point를 만들어 사용하기로 하였다. Bullet Point는 Canvas의 Circle과 Line을 사용하여snaildeveloper.tistory.com 진행한 부분은 실선으로, 아직 미진행 부분은 점선 및 회색으로 표시하여 상태를 아래와 같이 나타낼 수 있다. 상태해당 프로젝트에서의 상태는 4가지가 있다.성공 - 초록색실패 - 빨간색진행.. [View] 글 머리 (Bullet Point) 만들기 TODO 앱 개인 프로젝트를 리팩토링하면서 나의 일정 목록을 좀 더 직관적으로 보여주고 싶었다.그래서 나만의 Bullet Point를 만들어 사용하기로 하였다. Bullet Point는 Canvas의 Circle과 Line을 사용하여 구현하였는데, 고려해야 할 사항이 몇 가지 있었다. 리스트에서 사용하기에 RecyclerView의 Item에 선언된다.Item에 선언되기에 각 Item의 Position에 따라 모양이 달라진다. ex) 첫 번째 Item의 경우 원 위쪽 라인이 필요가 없다. 1. 인터페이스 생성확장성을 고려하여 다양한 Bullet Point를 구현할 수 있도록 Circle과 Line에 대한 Interface 생성interface Bullet { fun drawLineUp(canvas:.. [DataBinding] BindingAdapter 함수 파라미터 전달 프로젝트 리팩토링을 진행하던 도중 Tab을 구현할 일이 생겼는데, MVVM을 사용하고 있었기에 Tab 관련 설정을 BindingAdapter를 통해 구현하고자 했다. 관련하여 addTabSelectedListener를 설정하기 위해 BindingAdapter 파라미터로 함수를 전달하려 했지만 다음과 같은 오류를 만났다. object TabBindingAdapter { @JvmStatic @BindingAdapter("app:tab_selected") fun tabSelectedListener(tabLayout: TabLayout, changedTab: (StatisticsTab) -> Unit){ tabLayout.addOnTabSelectedListener(object : .. Git 내부 동작 분석 Github에서 레포지토리를 새로 만들면 다음과 같은 가이드가 나온다. 지금부터 init부터 branch까지 명령어에 따라 내부적으로 어떤 방식으로 작업이 이루어지는지 살펴보도록 한다. 1. git initLocal에 레포지토리를 연결 할 폴더를 하나 만들고 터미널을 통해 git init 명령어를 실행하면 .git 폴더가 생성된다. .git 폴더 내의 폴더 및 파일들은 Git 작업을 위한 각자의 역할들을 수행한다.2. git addgit init을 수행한 폴더에 test/test.txt 파일을 만든 후 git add를 수행하면 두 가지의 작업이 실행된다. 1) Blob 파일 생성objects 폴더 내에 Blob 파일이 생성되는데, add 명령어로 추가한 파일 내용으로 Hash 알고리즘을 돌려 나온 Has.. 이전 1 2 3 4 ··· 11 다음