목록분류 전체보기 (163)
Simple&Natural
UI를 구현하거나 앱들을 쓰다 보면 보면 특정 editText에 콤마나 단위 등을 고정하여 표시하는 경우가 있습니다. 예를 들면 은행 앱에서 출금 시 자동으로 콤마를 붙여주고 뒤에 '원'이 붙는 경우를 한 번 쯤은 보셨을 겁니다. 이런 화면은 어떻게 구현해야 할까요? 바로 TextWatcher를 사용하면 됩니다. TextWatcher는 안드로이드에서 제공하는 인터페이스로서 EditText의 텍스트 입력이 들어올 때 마다 콜백이 호출됩니다. 3가지 함수를 오버라이드 하게 되는데요. beforeTextChanged onTextChanged afterTextChanged 가 있습니다. beforeTextChanged는 바뀌기 전의 입력을 알 수 있고 onTextChanged는 바뀐 후의 입력을 알 수 있습니다..
DataBinding과 LiveData를 사용하면 여러모로 편리한 점이 많다. 하지만 실제 뷰모델에서 사용하는 데이터와 자료형이 다른 경우가 생긴다. 예를 들면, 잔액을 표시하는 경우 보통 뷰모델에서는 val amount: LiveData = ... 와 같은 형식으로 정의되어 있는데 이를 TextView나 EditText에 보여줄 때는 문자열 타입이 필요하기 때문이다. 양방향 바인딩을 사용하는 경우 이럴 때 어떻게 해야 할지 참 난감해진다. 그럴 땐 BindingAdapter를 사용하면 된다. /** * LiveData 에서는 숫자(Int, Long, BigInteger...) 타입을 유지하고 * EditText 에 표시할 때는 문자열 타입으로 표시해주기 위해 사용함. * BindingAdapter 를 ..
일반적인 MVVM 패턴에서 ViewModel을 편리하게 사용할 수 있도록 Android는 자체적으로 ViewModel 관련 컴포넌트들을 제공하고 있다. 이때, ViewModel은 생명주기를 가지는데 이는 처음 생성할 때 지정했던 ViewModelStoreOwner에 따라 달라진다. 다음 코드를 보자. override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) viewModel = ViewModelProvider( this, MyCommunityListViewModel.Factory( requireAppContainer().communityRepository, requireAppContainer().setti..
우선 기존에 제가 입사해서 처음 맡았던 프로젝트입니다. master가 있고, 하나씩 브랜치를 만들어 기능을 만들고 다시 master에 병합하는 구조입니다. 처음엔 저도 간단한 커밋 이외에는 깃을 사용하는 방법도 몰랐고 이렇게 관리하는 것에 큰 문제점을 느끼지 못했기 때문에 이와 같은 형태로 계속 관리를 하고 있었습니다. 하지만 하나 둘씩 겹치는 일정이 생기고 동시에 처리할 이슈들이 많아지다보니 기존의 방식으로는 도저히 브랜치 관리가 되지 않았습니다. 그래서 다음과 같은 브랜치 형태로 관리를 시작했습니다. 브랜치는 다음과 같은 4가지 형태가 있습니다. feature - 개발이나 수정사항이 들어오면 develop 브랜치에서 생성한다. develop - 개발이 완료된 기능들 중 배포를 원하는 feature를 ..