본문 바로가기

Android

(12)
[Architecture] 안드로이드가 권장하는 앱 아키텍처 개발자 모집공고를 보면 'MVVM 아키텍처'라는 단어를 쉽게 찾아볼 수 있다. 아키텍처는 시스템을 구성하는 서브 시스템, 컴포넌트와 같은 구성요소 간의 관계를 관리하는 시스템 구조이고, MVVM은 아키텍처의 한 기법으로 Model, View, ViewModel의 줄임말이다. 하나의 소프트웨어를 최대한 기능적으로 작은 단위로 나누어(이를 관심사 분리라 한다.) 테스트가 쉽고 큰 프로젝트도 상대적으로 관리하기 쉬워진다. 라는 것이 간단한 검색을 통해 얻은 사전적 지식이다. 이렇게 좋은 SW 설계 기법이지만 나는 아키텍처를 잘 모른다. 이번에 뉴스 앱을 따라 만들어 보면서 다음의 대략적인 '흐름'만 느낄 수 있었을 뿐이다. View에서 상호작용(예: 버튼 누름) 발생 - ViewModel이 Model에게 변동..
[Android] Layout 속성 설정할 때 조심할 것 이미지를 보면 앱 화면 상단에 빈 공간이 잡히는 걸 볼 수 있다. RecyclerView로 item들을 띄우는 fragment의 미리보기에서는 저런 공간이 없는데도 activity_main 레이아웃으로 들어오면 저 모양이다. 저걸 없애고자 3시간 가량 구글링 하고 있던 찰나에 이미지 뷰가 전체화면으로 출력되지 않는다고 도와달라는 글에서 adjustViewBound 속성을 제거하라는 대답을 볼 수 있었다. 순간 나도 속성값 잘못 준거 아닌가?! 라는 생각에 서둘러 activity_main으로 향했고, 아니나 다를까 paddingTop 속성에 액션바 만큼의 사이즈를 value로 설정해두었다. paddingTop 속성을 지우자 빈 공간이 사라졌다. 아까운 내 시간.. 해서 무작정 코드를 적지말자는 취지에서 이..
[Android] 뉴스 앱 만들어 본 후기 뉴스 앱을 만들게 된 계기는 원티드(Wanted)에서 진행하는 프리온 보딩(preonboarding) Android에 지원하기 위해서였다. 2주간의 기간 동안, 주어진 조건의 뉴스 앱을 만들어야 했는데 뚜껑을 열어보니 기간을 맞추지 못 할 것 같았다. 당장에 API 사용법 조차 몰라서 적용해보지도 못한 상황이었으니 어쩔 수 없었다. 그래서 인터넷에 올라오는 각종 예제들을 살펴보면서 공부해보자 라는 생각으로 시작했다. 다행히 많은 예제들이 GitHub에 올라와 있었고, 그중 하나를 골라 하나하나 뜯어봤다. 나는 여러 개의 Activity를 만들어 놓고 intent를 통해서 데이터 담고 Activity끼리 주고받을 줄만 알았지 data class, Factory / Resource Manage(?) 패턴, ..
[Android] Activity 수명 주기(LifeCycle) 사용자의 사용에 따라서 앱의 Activity 인스턴스는 수명 주기 안에서 서로 다른 상태를 통해 전환됩니다. 앱을 종료, 탐색, 새로운 Activity 생성 등의 상태가 이에 해당합니다. 유튜브 통해서 동영상을 시청하고 있는 사용자가 있습니다. 사용자는 홈버튼을 눌러 앱을 잠시 벗어나게 된다면 네트워크 연결을 종료하고 동영상 재생을 멈춥니다. 그리고 유튜브를 다시 실행하면 네트워크를 재연결해서 일시 정지된 부분부터 영상이 재생되도록 할 수 있습니다. 즉, 각각의 상태에서 취해야 하는 행동을 정의함으로써 앱의 안정성에 기여합니다. Activity 수명 주기(LifeCycle) 개념 활동 클래스는 원활한 Activity 전환을 위해서 onCreate(), onStart(), onResume(), onPaus..
[Android] Android studio Arctic Fox 버전 이후 build.gradle 수정하기 안드로이드 스튜디오를 올해 초에 다운로드 받아서 공부하기 시작했습니다. 공부를 하면서 추가 라이브러리가 필요한 경우가 많았고, 프로젝트 단위와 애플리케이션 단위의 build.gradle에 코드를 추가해야 했습니다. 이때 프로젝트 단위의 build.gradle에 아래와 같은 유형의 코드를 추가하면 오류가 발생하곤 했습니다. buildscript { repositories { google() // Google's Maven repository } dependencies { classpath 'com.google.gms:google-services:4.3.10' } } ... allprojects { repositories { google() mavenCentral() maven { url "https://j..
[Android] 홍드로이드 기초 강의 - 리사이클러뷰(RecyclerView) 1. 안드로이드 리사이클러뷰(RecyclerView) "수많은 데이터의 집합을 지정된 영역 내에서 유연하게(flexible) 표시되도록 만들어주는 위젯"입니다. 안드로이드 개발자 문서에 작성된 리사이클러뷰(RecyclerView)의 설명입니다. 이해를 돋기 위해 설명을 덧붙이자면, "사용자가 관리하는 데이터의 집합을 서로 다른 아이템으로 생성하고 리스트업 해서 한눈에 보이도록 합니다. 뿐만 아니라 스크롤 기능이 구비되어 있어 한 화면에 표시되기 어려운 양의 아이템들도 볼 수 있습니다." 이전에는 ListView 위젯으로 여러 아이템들을 표현해주었습니다. RecyclerView가 ListView의 기능을 이어받아 그 기능을 담당하는 것인데, "Recycle"이라는 용어가 붙은 것이 특이합니다. 이는 두 위..
[Android] 홍드로이드 기초 강의 - Camera 촬영 및 Image 가져오기_MainActivity 이전 Android 포스팅인 "[Android] 홍드로이드 기초 강의 - Camera 촬영 및 Image 가져오기_환경설정"에 이어서 MainActivity에 대해 작성하겠습니다. 1. 애플리케이션 동작 기본적인 동작은 간단합니다. 1) 사용자로부터 권한을 요청한다. 2) 촬영 버튼을 눌러 카메라를 실행한다. 3) 사진을 촬영하고, 앱 메인화면으로 가져온다. 1) 애플리케이션의 첫 화면인 MainActivity가 나타나면 권한이 허용되었는지 확인해야 합니다. 권한이 거부 상태이면 사용자에게 권한 요청 메시지가 보입니다. 2) 권한을 허용하면 앱 하단의 '촬영' 버튼을 이용해서 카메라를 사용할 수 있습니다. 3) 촬영한 이미지는 메인화면에 표시됩니다. 이때 어떻게 스마트폰을 들고 있느냐에 따라서 이미지가 ..
[Android] 홍드로이드 기초 강의 - Camera 촬영 및 Image 가져오기_환경설정 카카오톡에서 사진을 보낼 때 2가지 방법이 있습니다. 하나는 앨범에서 이미지를 가져오는 것이고, 다른 하나는 이미지를 촬영해서 보내는 방법입니다. 여기서 이미지를 촬영해서 보내는 방법을 선택하면 "카메라 - 사진 촬영 - 카메라 어플 실행"의 과정을 거칩니다. 이처럼 앱에서 기본 카메라를 실행 및 촬영하고, 이미지를 앱으로 가져오는 기능을 학습했습니다. 기초 강의라고 하기엔 코드가 길고 설명이 부족한 요소들이 다소 있어서 환경설정 파트와 Main 코드 파트로 나누어서 작성할 계획입니다. 1. 권한 허용 라이브러리 적용 및 Manifest 설정 이번에 학습한 예제가 카메라와 저장장치에 대한 접근 권한이 필요한 앱입니다. Android 6.0 마시멜로 버전부터는 권한 허용/거부 프로세스가 강화되어 사용하기 ..