728x90
반응형

Android/StoreInfo 51

<강의> 안드로이드 앱 개발 심화 - 사용자 위치 얻기

1. 위치 접근 권한 protection level이 dangerous이기 때문에 사용자에게 권한을 요청하여 받아야함 1) android.permission.ACCESS_COARSE_LOCATION - 와이파이나 모바일 데이터 또는 둘 다를 사용해 기기의 위치에 접근하는 권한 2) android.permission.ACCESS_FINE_LOCATION - 위성, 와이파이, 모바일 데이터 등 이용할 수 있는 위치 제공자를 사용해 최대한 정확한 위치에 접근하는 권한 3) android.permission.ACCESS_BACKGROUND_LOCATION - 안드로이드 10(API 레벨 29) 이상에서 백그라운드 상태에서 위치에 접근하는 권한 2. LocationManager 사용자의 위치를 얻기 위해 사용하는..

Android/StoreInfo 2024.01.24

<강의> 안드로이드 앱 개발 심화 - Room

1. Room이란? - SQLite를 쉽게 사용할 수 있는 데이터베이스 객체 매핑 라이브러리 - 쉽게 Query를 사용할 수 있는 API를 제공 - Query를 컴파일 시간에 검증 (SQLite보다 Room 사용을 권장하는 이유 중 하나) - Query 결과를 LiveData로 하여 데이터베이스가 변경될 때마다 쉽게 UI 변경 가능 2. Room의 주요 3요소 1) @Database(entities = [포함되는 Entity 리스트], version = Int형 숫자) - RoomDatabase를 상속받은 클래스를 데이터베이스로 지정하는 어노테이션 - version이 기존에 저장되어 있는 데이터베이스보다 높으면, 데이터베이스를 open할 때 Migration을 수행함 - Migration을 수행하는 방법..

Android/StoreInfo 2024.01.23

<강의> 안드로이드 앱 개발 심화 - SharedPreferences

1. SharedPreferences란? - 앱에서 데이터를 저장하는 방법 중 하나 - 간단한 데이터(설정 선택 정보)를 저장할 때 주로 사용 - XML 포맷의 텍스트 파일에 key-value 쌍으로 데이터를 저장 - 액티비티 간 공유하며, 한쪽에서 수정해도 다른쪽에서 수정된 데이터를 읽을 수 있음 - 저장된 데이터는 앱이 삭제되기 전까지 유지 - 외부에서는 읽을 수 없음 2. 공유 환경설정의 핸들 가져오기 1) getSharedPreferences(name, mode) - 이름으로 식별되는 여러개의 공유 환경설정 파일들이 필요한 경우 사용 - 애플리케이션의 모든 Context에서 호출 가능 - name : 데이터를 저장할 XML 파일의 이름 - mode : 파일의 공유 모드 > MODE_PRIVATE ..

Android/StoreInfo 2024.01.23

<정리> 챌린지반 과제2 - 2

저번까지 한 것에 이어서 선택과제였던 할일 등록 기능을 MVVM 패턴으로 구현하는 걸 혼자서 해보았다. 힌트에 기반하여 저번 코드에서 변경된 부분과 추가된 부분이 있다. [깃허브] https://github.com/heesoo-park/ChallengeRecruitAssignment/tree/week1_contain_MVVM 1. 할일 저장소 생성 각각의 프래그먼트에서 사용하던 더미데이터를 object 클래스인 DataStore로 모았다. 그리고 거기서 함수를 만들어 할일을 추가할 수 있도록 했다. object DataStore { private val totalTodoList: ArrayList = ArrayList() init { totalTodoList.add( Todo( "title 0", "de..

Android/StoreInfo 2024.01.23

<정리> 챌린지반 과제2 - 1

지금까지 회원가입 페이지에서 계속 덮어쓰던 과제가 마무리되고 드디어 새로운 과제가 시작되었다. 이번 과제는 회사 채용과제의 느낌을 가지고 있는 과제였고 처음으로 할 건 레이아웃을 짜는 거였다. 이전까지 했던 것들을 복습하는 느낌이었기에 레이아웃 짜는 건 금방이었다. 여기서 정리해볼건 만든 레이아웃을 화면에 띄울 때 했던 코드들이다. [깃허브] https://github.com/heesoo-park/ChallengeRecruitAssignment/tree/master 1. 데이터 클래스 생성 가장 먼저 데이터 클래스를 만들었다. Todo 앱을 만드는 것이기에 필요한 제목, 내용, 북마크 여부를 넣어서 만들었다. data class Todo( val title: String, val description: ..

Android/StoreInfo 2024.01.23

Facade Pattern에 대한 이해

1. 소개 일련의 저수준 인터페이스들을 하나의 고수준 인터페이스(통합 인터페이스)로 묶어주는 패턴 클라이언트 인터페이스 디자인을 위한 필수 패턴 고수준 인터페이스는 단순한 창구 역할을 한다. 클래스 구조가 정형화되지 않은 패턴 2. 사용 이유 일반적으로 저수준 인터페이스 여러개를 쓰게 되면 많은 객체에 강한 결합도(의존성)를 가지게 되는데 저수준 인터페이스들을 감싸는 고수준 인터페이스를 사용하면 결합도(의존성)가 많이 줄어들게 되기 때문에 사용한다. 인터페이스가 단순해질수록 문제가 줄어들고 코드도 간단해진다. 클라이언트가 사용할 때 복잡한 것을 의식하지 않도록 해준다. 3. 문제점 고수준 인터페이스가 복잡해진다는 것 유지보수 측면에서 볼 때 코드가 늘어난 것이기 때문에 비용이 더 든다. 4. 고려사항 각..

Android/StoreInfo 2024.01.22

<정리> 챌린지반 과제 5

오늘은 튜터님이 직접 오셨다. 그래서 진행도 말씀드리고 질문하고 나니까 이제는 지금 수준에서 마무리라고 해주셨다. 그래서 마지막으로 말해주시는 것만 반영했고 이를 정리해놓으려고 한다. 1. ViewModelFactory 뷰모델을 만들 때 파라미터를 넘겨줄 수 있는 뷰모델 팩토리를 만들었다. 이건 따로 파일을 만들어야했다. ViewModelProvider.Factory를 상속받는 뷰모델 팩토리 클래스를 만들었다. 그리고 안에 create함수를 오버라이딩했다. 제너릭 타입이 사용되는 걸 보고 매우 낯설었다. 그래도 이해하기에는 문제가 없었다. 뷰모델 팩토리로 값을 넘기고 그 값을 파라미터로 하는 뷰모델 객체의 인스턴스를 만드는 것..!! 나는 context, entryType, userEntity를 넘겼다...

Android/StoreInfo 2024.01.12

<정리> 챌린지반 과제 4

'오늘은 건드릴 거 없을 테니 sealed class를 해볼까?' 했지만 튜터님께 한번 물어보고 가야지 싶어서 질문하고 왔는데 건드릴 게 또 생겼다. 그리고 생각해보고 발전시킬 것도 말해주셨다. 1. 회원가입 버튼 클릭 리스너 내부 코드 변경 이전에는 클릭 리스너 안에서 뷰모델 함수를 부르고 인텐트를 보냈었다. 그런데 인텐트를 보내는 것도 라이브 데이터의 옵저버 안에서 하라고 하셨다. 그래서 라이브 데이터도 변경하고 관련있던 함수도 변경하고 옵저버도 변경했다. 모든 에러 텍스트를 세팅할 때마다 값을 변경했던 SignUpUserEntity 타입의 라이브 데이터는 클릭 리스너로 함수가 호출됐을 때 넘어온 매개변수 값으로만 값을 업데이트하도록 변경했다. 관련함수는 EditText의 값을 넘겨 받아 위의 라이브..

Android/StoreInfo 2024.01.10

<정리> 챌린지반 과제 3

sealed class가 먼저가 아니라 다른게 먼저가 되었다. 오늘 튜터님께 질문을 드리고 왔는데 생각은 했지만 뷰모델로 옮길 수 있을까 하는 부분들도 옮기는 게 좋다고 하셔서 도전하는 시간이었다. 뷰의 액션을 담당하는 부분은 뷰모델로 옮길 필요가 없다고 말씀해주셨고 이외의 분기 처리와 data class와 관련이 있는 부분들은 옮기면 될 거 같다고 하셨다. 초반에 좀 만지는데 생각보다 쉽지 않았다. 그래도 해결이 된 상태까지 와서 글을 남긴다. 1. onItemSelected 내의 when문 이동 이 부분은 저번에도 시도했다가 매개변수로 너무 옮길 게 많다고 판단해서 하지 않은 부분이었는데 튜터님께서 약간의 힌트를 주셨다. 그래서 아주 쉽게...는 아니지만 잘 이식했다. 가장 먼저는 서비스 제공자들을 ..

Android/StoreInfo 2024.01.09

<정리> 사과마켓 앱 구현 3

아마 오늘로 마무리가 될 거 같다. 왜냐하면 마지막 선택과제가 오늘 마무리가 됐기 때문이다. 1. Snackbar 생성 이 부분은 아주 간단했다. 디테일 페이지에서 하트 버튼을 누를 때 스낵바를 만들고 애니메이션 설정하고 띄우면 됐다. val snackbar = Snackbar.make( it, getString(R.string.snackbar_detail_favorite_comment), Snackbar.LENGTH_SHORT ) snackbar.animationMode = Snackbar.ANIMATION_MODE_FADE snackbar.show() 2. 좋아요 처리 어떻게 이걸 처리할까 고민을 하다가 가장 먼저 data class MarketItem에 Boolean 타입의 isClicked라는 변..

Android/StoreInfo 2024.01.08
반응형