뭐가 뭔지 헷갈려..! 이전 포스팅에서 ViewBinding과 DataBinding의 차이에 대해 소개했었다. 물론 아직 실무에 뛰어들지 않은 학부생1이 쓴 글이라 현역분들이 보기엔 허접할 수도 있겠지만 😂 나도 글로 다시 작성하면서 이들의 차이와 용도를 다시 복습
처음엔 그게 그거인줄 알았다 🤣 안드로이드를 제대로 배우기 시작한지 얼마 안되었을 당시, 나는 액티비티나 프래그먼트에서 findViewById()를 사용해 일일히 view의 id를 찾아주고 있었다. 그런데 뷰가 한두개도 아니고, 갯수가 많아지면 많아질수록 findVi
🙄 같은 object 같긴 한데 뭐가 다른지 ? 때는 코틀린을 배운지 얼마 안되었을 때다. 코틀린은 자바와 다르게 싱글톤 클래스를 사용하기 위해 Object 라는 것이 존재했다. 그래서 싱글톤 클래스로 선언해야 할 경우(ex 로컬 데이터베이스를 생성하거나 Retrof
프로젝트 최상위 build.gradle 파일에 Google Maven 저장소가 있는지 확인해야 한다. 나같은 경우엔 Bumblebee 버전을 사용하고 있기 때문에 build.gradle이 아닌 settings.gradle에서 확인해야 한다.Google Maven 저장소
평소 나는 안드로이드 프로젝트 구조에 대해 별 다른 의심을 하지 않고 바로바로 개발하기 바빴는데, 최근 인프런 강의에서 Clean Architecture에 대해 배우면서 프로젝트 구조에 대해 어느정도 개념을 잡아놔야 한다는 생각을 했고(꼭 그렇지 않더라도 이건 기본이지
😏 언제 어디서든 정말 자주 쓰이는 context ! 우리는 안드로이드 개발을 하면서 context를 정말 자주 사용한다. 다른 액티비티로 넘어갈 때나, 토스트 메세지를 출력할 때, 뷰와 리스너를 연결하거나 싱글톤 패턴을 구현할 때 등등 정말 많이 사용한다. 안드로이
Retrofit 안드로이드 개발을 하다보면 서버와 통신해야 할 때가 굉장히 많다. 예전에는 AsyncTask라는 클래스를 사용했지만, 그 친구는 예전에 deprecated 되어버렸고 이제는 그 역할을 Retrofit이라는 라이브러리가 대체하게 되었다. 나는 Open A
REST API OPEN API를 사용해 본 적 있다면 REST API에 대해서 익히 들었을 것이다. 나도 REST API에 대해서 많이 들어보긴 했었는데, OPEN API를 사용하기 전까진 이름만 알지 누가 물어보면 확실하게 대답해 줄 수는 없었다. 이전 포스팅에 서
🙄 최근 인프런에서 clean architecture 강의를 듣다가 Kotlin DSL에 대해 처음 알게 되었다. Kotlin DSL을 사용하면 gradle 파일의 확장자를 kts로 변경하던데, 매우 생소하기도 하고 DSL에 대해 간단하게나마 공부를 해야할 것 같아서
🙄 의존성 주입? MVVM 패턴을 프로젝트에 적용한다면 모델과 뷰를 분리하기 위해 뷰모델을 사용한다. 그런데 뷰모델을 여러 액티비티나 프래그먼트에서 사용해야 한다면 매번 귀찮게 뷰모델을 생성해야하고, 외부에서 애플리케이션이 시작될 때부터 객체를 생성해 필요할 때 주
✅ 비동기 프로그래밍 비동기 프로그래밍은 안드로이드 개발을 하던 다른 플랫폼으로 개발을 하던, 필수적으로 알아야하는 개념이라고 생각한다. 특히 안드로이드의 경우 RxJava나 Coroutine같은 비동기 라이브러리를 사용해 백그라운드 작업을 해야하는 경우가 많기 때문에
저번 포스팅에서 Coroutine과 RxJava에 대해 포스팅하기 전에 근본이 되는 비동기 프로그래밍(Asynchronous Programming)에 대해 소개했었다. 이번엔 코틀린으로 비동기 프로그래밍을 하면 빼먹을 수 없는, 안드로이드 개발자라면 필수적으로 써봐야
요즘 Retrofit을 사용해서 회원 로그인을 구현하고 있다. 전에 Retrofit에 대해서 간단하게 포스팅을 썼을 때는 단순히 POST method를 통해 필요한 파라미터를 서버에 전달해 로그인을 구현하는 방법에 대해 설명했었는데, 이렇게 단순하게만 구현하면 애플리케
안드로이드 스튜디오에서 네트워크 작업을 할 때 주로 사용하는 대표적인 라이브러리로 OkHttp, Retrofit이 있다. 요즘은 Retrofit을 주로 쓰고 부가적인 기능을 위해 OkHttpClient를 Retrofit 객체에 연결해서 사용하는 듯 한데, 이 둘의 차이
Retrofit을 이용해 로그인을 구현하면서 쿠키, 세션, 토큰 등에 대한 개념의 필요성을 느꼈고, 따라서 포스팅을 남긴 적이 있었다. 해당 포스팅을 남기면서 access token은 유효기간이 너무 짧기 때문에 refresh token을 이용해 access token
먼저, 프래그먼트에는 2개의 Lifecycle이 존재한다.LifecycleOwner는 프래그먼트 자체의 생명주기를 가지고 있는 클래스로, 프래그먼트의 전반적인 생명주기(onAttach() ~ onDestroy())와 연결되어 있다.viewLifecycleOwner는 프
POSTMAN은 개발한 API를 테스트하고, 테스트 결과를 공유하여 API 개발의 생산성을 높여주는 플랫폼이다. 우리는 POSTMAN을 사용해 이미 개발된 API 뿐만 아니라, Mock Server와 가상의 API를 만들어서 테스트 해 볼 수도 있다. 나 또한 아직 개
사용자에게 어떠한 행위에 대한 피드백을 제공하기 위해 우리는 토스트 메세지를 자주 사용한다. 토스트 메세지는 안드로이드 스튜디오에서 기본적으로 제공되는 걸 사용해도 되지만, 기본적으로 제공되는 토스트 메세지는 ui 변경에 제한적이라 자칫하면 좀 허전해 보일 수 있는
Navigation 프래그먼트 간 이동을 좀 더 쉽고 안정적이게 도와주는 Jetpack 구성요소로, 하나의 액티비티 안에서 여러 프래그먼트 간의 전환에 중점을 두고 설계가 되었다. 액티비티는 Navigation Graph와 연결되며, 필요에 따라 프래그먼트를 교체하는
LiveData에 대해 소개하기 전에 한가지 예시를 들어보겠다. 인스타그램 또는 트위터와 같은 SNS를 사용하는 회원들은 각자의 홈피를 가지고 있고, 다른 회원들의 홈피를 구경하며 맘에드는 게시물에 '좋아요'를 클릭한다. 좋아요를 클릭하면 버튼 바로 옆 텍스트에 하트를
이전에 Java로 간단한 일정관리 어플을 만들었었는데, 자잘한 버그들이 발견이 되어서 유지보수를 하던 중 코드의 심각성(스파게티..)을 너무 많이 느꼈다. 따라서 싹 갈아엎고 Kotlin으로 다시 개발하고 있는 중인데, 알람 기능을 만들면서 많이 헤맸기 때문에 공부도
Room은 안드로이드 애플리케이션에서 로컬 데이터베이스(SQLite)에 보다 쉽게 접근할 수 있도록 기능들을 제공하는 jetpack 라이브러리다. SQLite를 직접 사용했던 기존의 방식은 쿼리문을 직접 작성해야 했다. 따라서 쿼리문이 길어질수록 복잡해졌는데, 예를 들
안드로이드에 처음 입문했을 때는 잘 몰라서 무작정 액티비티만 만들었던 기억이 난다. 그래서 화면이 많아지면 많아질수록 액티비티 수도 그만큼 늘어났고, 액티비티가 좀 무겁기 때문에 빌드 속도에도 영향을 미쳤었다. 시간이 좀 지나고 나서 프래그먼트에 대해 알게 되었고,
안드로이드를 공부하면서 생명주기 개념에 대한 중요성을 매우 깨닫고 있다. 원래도 중요한 건 알았으나, 비동기 뿐만 아니라 뷰 관련 작업들도 생명주기에 따라 적절하게 해제를 해주어야 하니 정말 공부해야 할 것들이 많다는 생각과 함께 아직 많이 부족함을 느꼈다. 특히, 프
가장 위에 첨부해놓은 사진처럼, RecyclerView의 아이템을 오른쪽으로 밀면 삭제 버튼이 나타나도록, 왼쪽으로 밀면 수정 버튼이 나타나도록 했다. 위 사진처럼 구현하기 위해 필요한 레이아웃 파일과 클래스들을 차례로 나열해보도록 할테니, 참고해서 원하는 화면을 구현
이번 포스팅은 코틀린으로 안드로이드 개발을 할 때 '기본적으로' 알아야 하는 간단한 문법에 대해 소개한다. 안드로이드 공식 문서에서 설명을 잘 해놓아서 혼자서 보다가 기록으로 남겨놓는 게 좋을 것 같아서 이렇게 글을 쓰게 되었다. 하단에 링크로 올려놓은 안드로이드 공식
Koin에 이어 다른 DI 프레임워크도 공부해보고 싶어서 Hilt를 공부하게 되었다. Koin하고 비슷하지만 좀 더 복잡하고, 확실히 공부하고 넘어가야 할 것 같아서 이렇게 포스팅을 남기게 되었다. 둘 다 제대로 공부한 다음 서로 비교해서 포스팅에 남겨야겠다. 참고로
이전에 작성했던 dependency injection 포스팅에서 Koin에 대해 짤막하게 소개했었다. 그런데 이번에 Hilt에 대해 공부하고 글을 올리면서 Koin에 대해서도 아직 지식이 부족함을 느꼈고, 따라서 좀 더 깊게 공부해서 부록이 아닌 단독으로 포스팅을 올
Call을 사용해 서버에 요청을 보낼 때, 각각의 Call은 자체적으로 HTTP 요청과 응답 쌍을 생성한다. Call은 execute()를 사용해 동기적으로, 또는 enqueue()를 사용해 비동기적으로 실행될 수 있다. execute는 동기적으로 요청을 보내고 응답을
이전에 컴포즈에 대해 소개하는 포스팅을 업로드 했었다. 그 때 잠깐 컴포즈를 맛만 봤을 때, 이미 레이아웃 기반으로 화면을 만드는 것에 익숙해져 있기도 했고, 생각보다 코드레벨로 화면을 만드는 것이 어려워서 실습만 잠깐 해보고 말았었다. 하지만 XML은 언젠가 컴포즈가
컴포즈를 사용해서 화면을 만들 때, 화면을 구성하는 UI 요소가 많아지면 많아질수록 소스코드도 그만큼 늘어나게 된다. 만약 동일한 형태의 UI 요소를 여러개 사용할 경우 불필요한 코드만 늘어날 뿐인데, 기존의 XML과는 다르게 컴포즈로 화면을 만들면 특정 UI 요소를
안드로이드 OS안드로이드 첫 공식 언어, Java안드로이드 플랫폼 아키텍쳐안드로이드는 리눅스 커널 기반의 모바일 플랫폼 전용 운영체제이자 오픈소스 소프트웨어다. 안드로이드는 원래 디지털 카메라용 OS를 개발하려고 하던 신생 회사의 이름이었다. 휴대폰이 등장하고, 휴대폰
데이터바인딩에 대해 공부할 때 @BindingAdapter라는 어노테이션을 한 번 쯤은 봤을 것이다. 지금껏 xml - layout 태그 내에서 variable을 선언하고, RecyclerView + Adapter를 구현해서 RecyclerView의 ViewHolder
🙄 구글 로그인 구현 후의 고찰 구글 로그인을 구현한 후, 사용자의 이메일을 저장하기 위해 어떤 방식을 써야 할까 고민했다. 처음엔 Bundle에 이메일 값을 넣어 프래그먼트 간 이동시에 전달해야겠다는 생각을 했었다. 그런데 프래그먼트나 액티비티가 한두개도 아니고,
고정된 사이즈의 위젯을 만들 때 사용 (고정된 사이즈의 위젯으로 Row 또는 Column 내에서 간격을 주고 싶을 때도 사용)width, height 둘 중 하나라도 설정하지 않으면 child 크기에 맞게 설정됨SizedBox처럼 고정된 크기를 가진 위젯을 만들 수 있
본 글은 Flutter에서 뒤로가기 동작을 커스터마이징하는데 사용하는 WillPopScope가 Deprecated된 배경에 대해 소개합니다. 더 알고 싶다면 아래 참고하기 Blog https://heechokim.tistory.com/25 Youtube https:/
FlutterActivity는 안드로이드 네이티브 앱에서 Fullscreen Flutter UI를 표시하기 위해 사용하는 액티비티 클래스로, 네이티브(Kotlin)로 개발된 앱 내에서 플러터(dart)로 개발된 UI를 표시하기 위한 가장 간단하고 직관적인 방법 중 하나
플러터로 개발을 하다보면 종종 블루투스 같은 네이티브(Android, iOS) 플랫폼의 기능이 필요할 때가 있습니다. 네이티브 플랫폼의 기능을 사용하기 위해 플러터에서 네이티브 메서드를 호출해야할 때도 있고, 역의 기능이 필요할 때도 있습니다. 이렇게 네이티브 - 플러
플러터를 공부한지 그리 오래되지는 않았으나, 깊이가 없는 상태에서 주먹구구식으로 코드를 짜다보니 화면을 구현할 때 RenderFlex Overflowed 에러를 마주한적이 굉장히 많습니다. 특히 화면이 복잡할수록 디바이스 크기별로 대응가능한 Responsible UI