Android

    [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] Intent 정리하기

    Intent란?Intent는 다른 앱 구성요소에서 작업을 요청하는 데 사용할 수 있는 메시지 객체입니다. 인텐트는 여러 가지 방법으로 구성요소 간의 통신을 촉진하지만 다음과 같은 세 가지 기본적인 사용 사례가 있습니다.활동 시작활동이 완료될 때 결과를 수신하려면 startActivityForResult()를 호출합니다. 활동은 활동의 onActivityResult() 콜백에서 별도의 Intent 객체로 결과를 수신합니다. 자세한 내용은 활동 가이드를 참조하세요.Activity는 앱의 단일 화면을 나타냅니다. Intent를 startActivity()에 전달하여 Activity의 새 인스턴스를 시작할 수 있습니다. Intent는 시작할 활동을 설명하고 필요한 데이터를 전달합니다.서비스 시작Android 5..

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

    [Android] 안드로이드 기본 dialog 생성하기

    기본 dialog 생성하기 Custom Dialog가 아닌 안드로이드에서 제공하는 기본 Dialog를 사용하는 방법을 알아보고자 한다. 기본 구성 val dialog = AlertDialog.Builder(this) // dialog를 만든다 dialog.setTitle() // 다이얼로그 상단에 뜰 문구를 작성한다 .setMessage() // 상단 바로 아래에 뜰 문구를 작성한다. .setPositiveButton(""){dialog,which -> //setPositiveButton 매개변수로 버튼 안에 들어갈 텍스트를 쓰면된다. //해당 버튼을 눌렀을 때 발생시킬 이벤트를 작성한다. } .setNegativeButton(""){dialog,which -> // 위와 마찬자기로 버튼안에 들어갈 텍스..

    [Android 오류] Button Style 적용 안됨/색상변경 안됨

    Button Style 적용 안됨/색상변경 안됨 문제 style xml을 만들어 적용해도 만든 style로 적용되지 않는 문제가 발생했다. 해결 themes.xml에서 parent = "Theme.AppCompat.Light"으로 변경한다.