728x90
반응형

Android 89

<강의> 안드로이드 앱 개발 숙련 1주차

1. 뷰 바인딩 혼자서 앱 개발을할 때는 그냥 검색해서 편하다고 하니까 그냥 썼었다. 그런데 강의에 나오기도 했으니 정리하고 지나가야겠다. 1) 소개 뷰 바인딩이 나오게 된 가장 주된 이유는 findViewById를 대체하기 위해서다. 정말로 코드를 작성하다보면 뷰 객체를 많이 만들게 되는데 이를 초기화할 때마다 findViewById를 쓰고 있자면 좀 귀찮았다. 그런데 뷰 바인딩을 쓰게 되면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있을 뿐만 아니라 짧고 간결하고 가독성 좋게 작성할 수 있다. 안 쓸 이유가 없다고 생각한다. 모듈에서 사용 설정된 뷰 바인딩은 모듈에 있는 각 xml 레이아웃 파일의 결합 클래스를 생성한다고 하는데 코틀린 코드 파일과 xml 레이아웃 파일을 연결시킨다고 생각하면 될 거 같..

Android/StoreInfo 2024.01.04

LiveData에 대한 이해

1. LiveData 소개 LiveData는 데이터의 변경을 관찰할 수 있는 데이터 홀더 클래스다. LiveData는 생명주기를 인식하기 때문에 액티비티, 프래그먼트, 서비스 등 다른 앱 구성요소의 생명 주기를 고려한다. 따라서 앱 구성요소가 활성 상태(STARTED or RESUMED)일때만 데이터를 업데이트한다. LiveData가 생명주기를 인식할 수 있는 이유는 안드로이드 생명주기를 알고 있는 LifeCyleOwner 클래스를 가지고 있기 때문이다. LiveData는 옵저버 객체와 함께 사용하는데 LiveData가 가지고 있는 데이터에 변화가 생기는 경우, LiveData는 등록된 옵저버 객체의 생명주기가 활성 상태인지 확인한 다음 활성 상태라면 데이터 변화를 알려주고, 옵저버의 onChanged(..

Android/StoreInfo 2024.01.03

ViewModel에 대한 이해

1. ViewModel 소개 MVVM 디자인 패턴으로부터 파생된 ViewModel은 Android Jetpack의 구성요소 중에 하나이고 Android Architecture Components 중에 하나이며, 비즈니스 로직 또는 화면 수준 상태 홀더다. UI에 상태를 노출하고 관련 비즈니스 로직을 캡슐화한다. 좀더 덧붙이면 UI 컨트롤러의 로직에서 UI에 노출되는 데이터를 다루는 로직을 분리하기 위해 등장한 요소이다. 장점은 UI 관련 데이터를 저장하고 관리하여 UI 상태를 유지함으로 여러 구성 변경에도 이를 유지한다는 것과 비즈니스 로직에 대한 액세스 권한을 제공한다는 것이다. 기존에 UI 관련 데이터를 가지는 일반 클래스로 UI 데이터를 표시했는데 이는 이벤트나 화면 이동할 때 문제가 될 수 있었다..

Android/StoreInfo 2024.01.02

<정리> 메모 앱 만들기 6일차

오늘은 UI 상에서 나왔던 예외사항들을 처리하는 시간이 대부분이었다. 1. 카테고리 목록 처리 툴바의 제목 부분이나 옆의 방향 버튼을 클릭하면 카테고리 목록이 나오고 이 상황에서 5일차까지만 해도 툴바를 터치하는 경우에 카테고리 목록이 사라지도록 했다. 그 이후에야 툴바의 버튼들이 원래의 역할을 했다. 그런데 문제가 또 있었다. 아래의 메모장 구역을 클릭할 때와 뒤로가기 버튼을 눌렀을 때는 카테고리 목록을 그냥 둔 채로 자기 일을 한다는 문제 말이다!! 먼저 카테고리 목록 영역 이외의 영역을 터치했을 때를 어떻게 처리할까 하다가 지금 카테고리목록을 레이아웃을 이용해 띄웠듯이 보이지 않는 레이아웃을 만들어서 그 영역이 카테고리 목록이 나올 때 같이 나와고, 클릭했을 때 다같이 사라지게 하면 되지 않을까라는..

Android/Kotlin 2023.12.22

<정리> 메모 앱 만들기 5일차

1. 메모 리스트 만들기(1) 처음에는 이걸 리스트뷰를 가지고 구현했다. 순서는 Memo 데이터 클래스를 만들고 data class Memo(val title: String, val content: String, val day: String) 메인 액티비티 레이아웃에서 리스트뷰를 추가하고 ... 리스트 하나하나에 대한 레이아웃을 만들고 메인 액티비티에서 리스트뷰 객체와 들어갈 내용들을 배열리스트로 만든 다음 // 리스트뷰 변수 private val listView: ListView by lazy { findViewById(R.id.list_view) } val memoList = arrayListOf( Memo("1212", "dkdkfjfk", "12.01"), Memo("1212", "dkdkfjfk..

Android/Kotlin 2023.12.21

<정리> 메모 앱 만들기 4일차

오늘도 다른 공부하느라 딱 한 가지 기능만 추가했다. 그 외에는 주석 달기와 코드 구조 정리를 했다. 1. 액션바 흐름 완성 어제까지 해서 이제 액션바에서 내가 원하던 기능의 95퍼센트까지는 완성했다. 나머지를 채우기 위해서 오늘 한 것은 카테고리 목록이 열려있는 상태일 때 액션바의 모든 부분이 카테고리 목록을 닫는 걸 우선시하는 거였다.(이거 해도 남은 게 하나 있기는 하다.) 그걸 위해서 먼저 다른 기능들을 하는 옵션 메뉴들을 제어할 필요가 있었다. 그래서 onOptionsItemSelected에 가서 각 버튼마다 카테고리 목록이 보일 때 그걸 먼저 닫도록 했다. 전에 만들어둔 setCategoryMenu() 잘 쓰고 있다...가 아니라 너무 같은 조건이 반복되는게 보기가 좋지 않았다. 어떻게 할까 ..

Android/Kotlin 2023.12.20

<정리> 자기소개 앱 구현 4

저번 3까지는 거의 챌린지반의 내용만 들어가있었는데 오늘 과제를 제출하고 해설영상을 보고 나니까 기본 개인 과제도 보완할 점들이 생겨서 이 부분들을 정리해놓으려고 한다. 1. 문자열 정리 이건 저번에 적어놨던 내용인데 그건 챌린지반 과제에서만 했었고 여기에서는 안 했었다. 그래서 이번에 추가를 했다. 전에는 일일이 적었었는데 마우스를 문자열에 클릭하고 잠시 기다리면 왼쪽에 노란 전구가 뜨고 거기에서 Extract string resource를 누르고 name만 입력하면 strings.xml에 추가가 되더라 이것도 자주 쓰게 될 거 같다. Introducemyself 종료 이름 이름을 입력하세요. 아이디 아이디를 입력하세요. 비밀번호 비밀번호를 입력하세요. 회원가입 로그인 회원가입 입력되지 않은 정보가 있..

Android/StoreInfo 2023.12.20

<정리> 메모 앱 만들기 3일차

오늘은 뭐 많이 만지지는 않았다. 1. 툴바 레이아웃 수정 툴바 타이틀을 나는 레이아웃 상에서 만들었고 그 타이틀의 의미는 카테고리였다. 그래서 카테고리를 변경할 수 있는 이미지 뷰(버튼)를 추가했다. 사용할 이미지는 기본적으로 제공하는 위,아래 화살표를 가져왔다. 2. 메인 레이아웃 수정 여기도 약간 수정이 들어갔는데 그 이유는 툴바 아래에 카테고리 목록을 띄우기 위한 공간을 만들기 위해서였다. 하지만 생각이 잘 나지 않더라 지금 레이아웃에서는 숨겨놨다가 보이는 걸로 하면 공간을 차지해서 안 될 거고 bottomsheet를 수정해서 하는 것도 원하는 방식은 아니었다. 팝업도 마찬가지고... 그러다가 튜터님께 갔는데 바로 가능성이 보이는 방법을 제시해주시더라 바로 레이아웃을 ConstraintLayout..

Android/Kotlin 2023.12.19

<정리> 자기소개 앱 구현 3

1차로 마무리되는 월요일이었다. 잘 마무리했고 더 이상 만질 게 없을 거라고 생각했지만 그 생각을 비웃기라도 하듯이 튜터님의 해설은 더 할 게 있다는 걸 많이 알려주었다. 1. 문자열 사용 나는 문자열, 특히 반복돼서 사용되거나 한 번 쓰이는 거 모두 그냥 따옴표 안에 코드로 작성했다. 그러나 오늘 튜터님 말하는 걸로는 그런 문자열을 strings.xml에 모아놓는 습관을 들이라고 하더라 이후의 번역 작업이나 수정의 용이성을 위해서... 정말 귀찮은 작업이지만 나도 튜터님의 예제를 받아서 잘 작성을 했다. 이름 이름을 입력해주세요. 이메일 gmail.com kakao.com naver.com 직접입력 이메일을 입력해주세요. 이메일 주소를 입력해주세요. 올바른 형식이 아닙니다.(예: xxx.com) 비밀번..

Android/StoreInfo 2023.12.18

<정리> 메모 앱 만들기 2일차

2일차가 시작되었다. 이번에는 기능을 추가하거나 그런 것보다는 기존 기능을 보완하고 완성하는 쪽으로 진행했다. 1. 내비게이션 드로어 완성 디자인적으로나 기능적으로 완성이 아니라 UI 구성 측면에서 완성이 되었다. 어떻게 보면 이 UI 구성을 하기 위해서 안드로이드 스튜디오에서 주는 NavigationView를 쓰지 않고 따로 만들었다고 볼 수 있다. 저번에 헤더까지는 만들었었고 오늘은 바디와 푸터를 구성해서 넣어줬다. 바디는 ConstraintLayout안에 버튼 역할을 할 ImageView와 버튼 이름의 역할을 할 TextView가 6개 있고 아래에 큰 이미지 버튼을 생각하고 하나 넣어놨다. ConstraintLayout의 높이는 wrap_content로 지정했다. 이거 하나 넣었는데 엄청 길다.....

Android/Kotlin 2023.12.15
반응형