Android

    [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] 안드로이드 MaskFilter로 blur 효과 구현하기

    들어가기 전 엄빠도 어렸다 서비스를 만들면서 그림과같이 내가 답변을 하기 전에 상대가 답변을 할 경우 문답화면에서 상대 답변이 블러처리가 되어있는 디자인을 구현했어야 했다. 이 때 블러를 구현하기 위해서 사용했던 방법을 소개하고자 한다. Blur 효과 만들기 안드로이드 Paint BlurMaskFilter 사용 private fun setBlurText(isBlur: Boolean) { with(binding) { tvAnswerOther.setLayerType(View.LAYER_TYPE_SOFTWARE, null).apply { if (isBlur) tvAnswerOther.paint.maskFilter = BlurMaskFilter(16f, BlurMaskFilter.Blur.NORMAL) else..

    [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등 하나의 객체만 필요 할 경우 사용된다! 사용이유 싱글톤패턴으로 인스턴스를 생성..

    [Jetpack Compose] Text 만들기

    Jetpack Compose Text 만들기 @Composable fun BirthdayGreetingWithText(message:String,from:String) { // 함수 단어 첫말은 대문자로 Column { Text(text = message, fontSize = 36.sp) Text(text = from , fontSize = 24.sp ) //각 Text를 작성 할 수 있따. } //Column은 안에 Text들이 수직적으로 나열되도록 해줌! //Row는 수평적으로 나열 } @Preview(showBackground = true) //미리 볼 수 있도록 하는 주석 @Composable fun DefaultPreview() { HapplyBirthdayTheme { BirthdayGreet..

    [요즘 IT] Jetpack Compose를 배워야하는 이유?

    구글 Compose Camp에 참여하기 전 나는 요즘IT 사이트에서 해당 글을 보게되었다. Jetpack Compose, 뭐가 좋은데? | 요즘IT Jetpack Compose, 뭐가 좋은데? | 요즘IT 알라미 Android 팀에서도 최신 UI 빌드 트렌드를 따라가기 위해, 더 나아가 Compose의 이점을 활용하기 위해 기존 UI 빌드 방식을 Jetpack Compose로 전환하고 있습니다. 이에 대한 첫걸음으로 다음 ‘설정 yozm.wishket.com 안드로이드를 공부하면서 Jetpack에 대해 관심이 많아졌고 XML을 사용하지 않는 Jetpack Compose에 대해서도 자연스럽게 궁금했었다. 마침 이 글을 발견했고 읽어보았는데... 결론적으로 왜 Jetpack Compose로에 대체가 이루어질..

    [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..

    [Android] RecyclerView 데이터 추가/삭제/수정 반영 방법

    RecyclerView 데이터 추가/삭제/수정 반영 방법 RecyclerView를 사용할 때 데이터를 삭제/수정/추가하는 일이 일어날 수 있다. 메모앱을 만들면서 메모를 추가/삭제/수정하는 기능이 필요했고, 이번 게시물에서는 바뀐 데이터를 RecyclerView에 반영하는 방법을 알아보고자 한다. RecyclerView 와 dataList RecyclerView는 아이템 뷰를 재활용해 각 데이터들을 나타내기 때문에 뷰에 내용을 담을 데이터리스트가 필수다. 따라서 RVAdpater를 만들 때 매개변수로 dataList를 전달해준다. 이 때 dataList에 일어날 수 있는 상황은 크게 3가지가 있다. dataList에 data가 추가되는 상황 새로운 data가 dataList에 추가된 것이다. dataLi..