Andorid
-
MVVM 적용기(2)Andorid 2022. 4. 2. 21:26
이전 글에서는 MVVM에 대한 대략적인 개념과 그것을 구현하기 위한 컴포넌트들에 대해 소개하였다. 이번에는 실제 코드를 통해 내가 MVVM을 어떻게 구현했는 지에 대해 보여주려고 한다. 내가 사이드 프로젝트로 시작한 어플에 MVVM을 적용했는데, 일반적으로는 Repository에 Room을 사용해서 내부데이터를 저장한다고 하지만, 내가 사용할 어플에서는 그 정도로 많은 양의 데이터를 저장할 필요가 없었고, 굳이 MVVM을 구현하기 위해서 Room을 사용하는 것 자체가 소 잡는데 닭 잡는 칼을 쓰는 모양새가 되는 것 같아서, 이전에 사용하던 SharedPreperence를 그대로 사용하기로 했다. 서버에 데이터를 요청하는 로직도 Model의 역할로서 같은 Repository에 포함시키도록 했다. objec..
-
MVVM 적용기(1)Andorid 2022. 4. 2. 21:24
내가 기존 회사에서 처음으로 시도해봤던 아키텍처 패턴은 MVP 패턴으로, 데이터 소스에 대한 접근은 Model이 담당하고, 사용자에게 데이터를 보여주는 부분(Activity,Fragment)는 View가 담당하며, 두 사이를 Presenter가 매개하는 형식의 패턴이라고 할 수 있다. 위 패턴을 직접 업무에서 적용하려고 했을 때 발생한 문제는 다음과 같았다. 일반적으로 View와 Presenter를 정의한 인터페이스인 Contract 등을 따로 정의해야 했고, 매번 두 아키텍처 컴포넌트를 변경해야 할 일이 생길 때마다 해당 인터페이스를 무조건적으로 변경해야 하므로 일을 두 번하게 되었다. View에는 데이터를 표시하는 일만 담당시키고, 복잡한 로직은 Presenter에게 위임시켜야 이상적인 MVP 패턴이..
-
[Android]Firebase로 채팅 앱 만들기(6)Andorid 2022. 3. 31. 15:03
이번엔 각 채팅방을 선택했을 때 이동할 채팅방 화면을 만들어보자. 우선 채팅방에 필요한 UI와, 메시지의 배경 레이아웃을 만들어준다. 위는 화면에 필요한 레이아웃에 사용되는 XML이다. 채팅에 사용되는 메시지의 레이아웃이다. background의 배경은 drawable에 corner를 설정하여 둥근 테두리 배경을 생성했다. 나/상대방 구분은 같은 배경에 색상을 변경하여 구분하도록 했다. @RequiresApi(Build.VERSION_CODES.O) class ChatRoomActivity : AppCompatActivity() { lateinit var binding: ActivityChatroomBinding lateinit var btn_exit: ImageButton lateinit var btn..
-
[Android]Firebase로 채팅 앱 만들기(5)Andorid 2022. 3. 31. 14:58
이번에는 새로 채팅할 상대를 추가할 수 있는 검색창을 만들어보도록 하겠다. class AddChatRoomActivity : AppCompatActivity() { lateinit var binding:ActivityAddChatroomBinding lateinit var btn_exit: ImageButton lateinit var edt_opponent:EditText lateinit var firebaseDatabase:DatabaseReference lateinit var recycler_people:RecyclerView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ..
-
[Android]Firebase로 채팅 앱 만들기(4)Andorid 2022. 3. 31. 14:55
회원가입 페이지와 로그인 페이지도 만들어졌으니, 이제 진입할 홈 화면을 만들 차례다. 나는 카카오톡처럼 채팅방 목록과 함께 새 채팅방을 추가할 수 있는 버튼과 로그아웃 버튼을 표시했다. 전체 레이아웃 코드는 위와 같다. package com.miso.chatapplication.main import android.content.Intent import android.os.Build import android.os.Bundle import android.widget.Button import android.widget.Toast import androidx.annotation.RequiresApi import androidx.appcompat.app.AlertDialog import androidx.appc..
-
[Android]Firebase로 채팅 앱 만들기(3)Andorid 2022. 3. 31. 14:53
지난 페이지에서는 채팅 앱에서 참여할 사용자를 추가할 수 있는 회원가입 화면을 만들어보았다. 이제는 만들어진 회원의 계정으로 로그인할 수 있는 로그인 페이지를 만들어야 한다. 먼저 로그인 레이아웃을 만들어준다. 로그인 레이아웃 xml은 위와 같다. package com.miso.chatapplication import android.content.Context import android.content.Intent import android.content.SharedPreferences import android.os.Bundle import android.util.Log import android.widget.Button import android.widget.EditText import android...
-
[Android]Firebase로 채팅 앱 만들기(2)Andorid 2022. 3. 31. 14:50
지난 페이지에서는 안드로이드와 Firebase 간의 연동 설정을 끝냈으니, 이젠 회원가입 페이지를 만들어보도록 하자. 우선 회원가입에 쓸 레이아웃 페이지를 만들어준다. 완성한 모습은 위와 같다. 이제 회원가입을 진행할 Activity를 만들어주자. package com.miso.chatapplication import android.content.Intent import android.os.Bundle import android.util.Log import android.widget.Button import android.widget.EditText import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com...
-
[Android] Firebase로 채팅 앱 만들기(1)Andorid 2022. 3. 31. 14:20
이직을 위해 구직활동을 하던 중 평소 눈여겨 보고 있던 회사에서 입사 제안이 와서 프로젝트 과제를 수행하게 되었다. 그 과제의 요구조건은 1:1 채팅 앱을 만들어보라는 것이었는데, 서버가 있다는 가정 하에서 진행을 해보라는 것이 내게는 참 막막했다. 그래서 어떻게 구현할 지 곰곰히 생각해보다가, 예전에 졸업작품을 만들 때 썼던 Firebase가 떠올라 검색을 해보니 Realtime Database를 통해 채팅 앱을 만들 수 있는 것 같아 나도 시도해보게 되었다. 그 결과 꽤나 보기좋은 형태의 결과가 나왔고, 이 과정을 글로 공유하고자 한다. 본래 회원가입 기능은 기능 요구사항에 포함되어 있지는 않았으나, 만들어두는 것이 추후 프로젝트 진행에도 편리할 것 같아 만들어보았다. 우선 처음 프로젝트를 시작하기 ..
-
[Android] 카카오 로그인 실패 시 해결방법Andorid 2022. 3. 29. 23:55
앱 출시를 위해 구글 플레이스토어에 개발자로 등록한 후 내부 테스트를 위해 release 방식으로 컴파일 후 카카오 로그인을 시도해보니, 이전에 debug 모드에서 잘만 수행되었던 카카오 로그인에 실패하였다. 웹에서 정보를 찾아보니 이 문제는 다른 개발자들도 흔히 겪는 문제인 것 같았다. https://developers.kakao.com/docs/latest/ko/getting-started/sdk-android#add-key-hash Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다. developers.kakao.com 카카오 로그인의 공식 문서에 따르면, 카카오 로그인에 사용되는..