Android/공부

    [Android] Flow란? LiveData와 Flow 비교

    Flow? Android 에서 Coroutine의 Flow는 데이터 스트림이며, 코루틴 상에서 리액티브 프로그래밍을 지원하기 위한 구성요소이다. Flow는 코루틴을 기반으로 여러 값을 제공할 수 있다. 비동기식으로 계산할 수 있는 데이터 스트림의 개념이다. 따라서 반환 값은 동일한 유형이어야 한다. ex) Flow는 정수 값을 내보내는 흐름이다. Flow는 suspend함수를 사용하여 값을 비동기적으로 생성하고 사용한다. 예를 들어 Flow는 Default 스레드를 차단하지 않고 다음 값을 생성할 네트워크 요청을 안전하게 만들 수 있다. 코루틴에서 비동기적으로 호출하기 위한 suspend 함수와 동일하지만 flow에서는 suspend 를 붙일 필요가 없다. 리액티브 프로그래밍이란? == 반응형 프로그래밍..

    [Android/코루틴] 1. 코루틴은 무엇이고 왜 쓰는가?

    들어가기 전 프로젝트를 하면서 suspend 함수를 활용해 서버통신을 하는 코드를 작성한 경험이 있다. 이것이 코루틴이고 비동기 실행을 간단하게 해준다는 것 까지만 알고있었다. 원리 및 장점을 제대로 알고있는 채로 코루틴을 사용하고 싶다는 생각에 코루틴을 공부하면서 배운 내용들을 시리즈로 포스팅하고자 한다. Coroutine = Co + Routine 코루틴을 co(with의 의미) + routine = 루틴의 일종으로 협동루틴이라 할 수 있다. 코루틴은 [그림 1]과 같이 이전에 자신의 실행이 마지막으로 중단되었던 지점 다음의 장소에서 실행을 재개한다. 루틴과 코루틴을 비교하면 [그림 2]와 같다. 루틴이 입구와 출구가 하나라면, 코루틴은 중단과 재개가 계속될 수 있는 즉 입구와 출구가 여러개라고 할 ..

    [Android] 첫 안드로이드 앱 릴리즈 과정에서 겪은 트러블슈팅들

    1. kakao Login API 문제 발생 [Android/트러블슈팅] Keystore 정보 확인하는 법 들어가기 전 릴리즈 apk 를 뽑을 때 keystore를 사용하게되는데, 내 keystore에 별칭을 까먹는 경우가 있었다. 이 때 내 keystore에 정보를 알 수 있는 방법을 알아보자. cmd에 keytool -list -v -keystore 'jks 파일 hyeonlog-developer.tistory.com [Android/트러블슈팅] Kakao Login API Apk 추출 시 로그인 안되는 문제/KeyHash 오류 들어가기 전 '엄빠도 어렸다'라는 서비스를 만들면서 겪은 kakao login api 트러블 슈팅에 대해 포스팅하고자 한다. 문제 설명 우리 팀은 릴리즈를 앞두고 안드로이드 ..

    [Android] LifecycleOwner란? viewLifecycleOwner와의 비교

    들어가기 전 이번 포스팅에서는 ViewModel의 LiveData를 View에서 observe 할 때 사용하는 LifecycleOwner를 잘못 사용한 나의 사례를 바탕으로 LifecycleOwner란 무엇인지, viewLifecycleOwner와 비교해 fragment에서는 무엇을 사용해야하는지에 대해 알아보고자 한다. 안드로이드 프로젝트에서 mvvm 패턴을 구현할 때, model 에서 받아온 데이터를 가공해 view에 제공하기 위해서 viewModel을 활용한다. 이 때 AAC ViewModel에서 LiveData를 활용해 observerPattern을 이용할 것이다. 아래는 예시 코드이다. [그림 1]은 ViewModel에서 listQnaResponse라는 LiveData 객체를 생성하고, View..

    [Android] UI State란 무엇일까?

    들어가기 전 현재 나는 부모님과의 문답 서비스 엄빠도 어렸다 라는 프로젝트를 진행하고 있다. 프로젝트 진행 중 서버로부터 받아온 데이터가 UI에 나타날 때 빈 화면(데이터가 덜 표시된 화면)이 노출되는 경우가 종종 발생했다. 이 부분을 해결하고자 로딩뷰를 추가하기로 하였고, 공부하면서 로딩뷰를 어떻게 관리할까? 라는 의문이 생겼다. 그 과정에서 활용을 위해 UI State가 무엇인지에 관련된 글을 작성해보겠다. UI Layer UI의 역할은 화면에 애플리케이션 데이터를 표시하고 사용자의 상호작용의 기본 지점으로서의 역할을 수행하는 것이다. 상호작용 (Button 누르기) 또는 외부압력 (네트워크 응답)으로 인해 데이터가 변할 때 마다 변경사항이 반영하도록 UI가 업데이트 되어야 한다. https://hy..

    [Android] Dependency Injection이란? + Hilt

    들어가기 전 Clean Architecture를 공부하면서 '의존성' 낮추기, '결합도' 낮추기, '의존성' 주입, '의존성' 역전 등 지속적으로 의존성에 대한 내용이 언급되었다. 그래서 소프트웨어 설계에서 Dependency는 무엇을 의미하는지, 안드로이드에서는 이를 어떻게 적용할 수 있는지를 공부해보고자 한다. Dependency "A가 B를 의존한다." 라는 표현은 아래와 같은 뜻을 담고 있다. 의존대상 B가 변하면, 그것이 A에 영향을 미친다. - 이일민, 토비의 스프링 3.1, 에이콘(2012), p113 이런 의존관계를 UML의 표현을 빌려 A--->B로 표현할 수 있다. 이는 B의 기능이 추가나 변경되면 그 영향이 A에 미친다. B의 기능 추가나 변경이 A에 영향을 미치게되는 경우, B에게 ..

    [Android] Clean Architecture + MVVM 패턴

    들어가기 전 안드로이드 프로젝트를 하면서 MVVM , Clean Architecture, Dependency injection etc... 이런 키워드들을 정말 많이 들었다. Sopt 처음 시작할 때 Clean Architecture를 적용한 프로젝트를 진행하고 싶다고 말할 정도로 나는 이 부분에 대한 공부를 하고싶었다. 이번 앱잼에서 MVVM 패턴을 적용했다는 점(Hilt (x))에서 반은 이뤘지만, 어떻게보면 왜 이렇게 사용하는지 조차 모르고 사용한 부분들이 많았다. 이번기회에 제대로 이해되지 않은 부분들도 다 이해하고 넘어가고자 이 포스팅을 작성한다. MVVM (Model - View - ViewModel) MVVM 패턴은 MVP 패턴에서 파생된 패턴으로 비즈니스 로직과 프레젠테이션 로직을 사용자 ..

    [Android] 알림 커스텀과 안드로이드 13 알림 권한 설정

    들어가기 전 이번 sopt 앱잼에서 FCM 알림을 담당하게 되면서, 알림 권한과 알림 커스텀에 대해 공부하게되었다. 1.안드로이드 13 알림권한 설정 이전까지는 안드로이드에서 알림을 표시할 때 권한이 없어도 개발자가 알아서 알림을 만들고 띄울 수 있었다. 하지만 이를 악용하는 사례(무분별한 광고알림)들이 많아지자 Android 8.0 (Oreo) 에서는 Notification Channel 을 도입시켰고, Android 13 (Tiramisu) 부터는 런타임 알림 권한 (POST_NOTIFICATIONS)이 추가되었다. 이제 안드로이드에서도 사용자에게 알림 권한을 요청하고, 사용자의 알림 허가를 받은 뒤에 알림을 표시할 수 있게된 것이다. 사용자의 알림 권한을 확인하고 권한을 요청하는 방법은 아래와 같다..

    [Android] Retrofit2 싱글톤패턴 적용하기

    Retrofit2 싱글톤패턴 적용하기 UMC 안드로이드 세미나에서 retrofit2 를 사용하는 방법을 배웠다. 당시 세미나에서 retrofit를 사용할 Activity에다가 build를 하셨다. 그렇다면 retrofit을 통해 서버와 데이터를 주고받을 activity전부에 저렇게 build를 다 해야하는건가 의문이 생겼고, 관련 질문을 하니 싱글톤패턴에 대해서 알려주셨다! 이를 기억하기위해 블로그에 작성해보고자 한다. 싱글톤 패턴이란? 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다. 싱글톤패턴을 사용하면 1번의 정의만으로 전역적으로 사용할 수 있다. 그러므로 NetworkService, DatabaseService등 하나의 객체만 필요 할 경우 사용된다! 사용이유 싱글톤패턴으로 인스턴스를 생성..

    [Android] Recyclerview item Click / Click Listener 등록하는 법

    Recyclerview item Click / Click Listener 등록하는 법 RecyclerView의 클릭이벤트는 onBindViewHolder 함수에서 setOnClickListener를 통해서도 구현할 수 있고, 외부에서 click 이벤트를 정의하고싶다면 리스너 인터페이스를 만들 수도 있다. 이 게시물에서는 외부에서 item click시 발생되는 이벤트를 정의하기 위해 리스너 인터페이스를 만드는 방법을 알아보고자 한다. 리스너를 만들면서도 리스너에 대해 잘 모르는거같아서 찾아보았다. Listener란? 리스너는 특정 이벤트를 처리하는 인터페이스로 추상메서드를 받아 실행하며 이벤트 핸들러라고도 불린다. RVAdapter에서 Click Listener 만드는 법: 1️⃣ interface를 만든..

    [Android] RecyclerView란? / RecyclerView Adapter 사용법

    ⭐ RecyclerView란? View를 재활용하는 기능을 추가한 효과적인 ListView이다. ViewHolder란? 각 뷰를 보관하는 Holder 객체이다. → ListView 와 RecyclerView는 inflate를 최소화 하기 위해 뷰를 재활용한다. 이 때 각 뷰의 내용을 업데이트하기 위해서는 findViewById를 매번 호출해야하고, 이로 인한 성능저하 때문에 ItemView의 각 요소를 바로 엑세스 할 수 있도록 저장해두고 사용하기 위한 객체를 만든다. 그리고 이것이 ViewHolder 이다. inflate : xml로 쓰여있는 View의 정의를 실제 View 객체로 만드는 것을 의미한다. 특징 //ViewHolder 만들어질 때 실행할 동작 override fun onCreateView..