앱개발 심화 1주차 정리 - 2 사용자 위치 얻기 위치접근권한- android.permission.ACCESS_COARSE_LOCATION: 와이파이나 모바일 데이터를 사용해 기기의 위치에 접근하는 권한이다. (도시에서 1블록 정도의 오차 수준)- android.permission.ACCESS_FINE_LOCATION: 위성, 와이파이, 모바일 데이터 등 이용할 수 있는 위치 제공자를 사용해 최대한 정확한 위치에 접근하는 권한입니다. - android.permission.ACCESS_BACKGROUND_LOCATION: API 레벨 29 이상에서 백그라운드 상태에서 위치에 접근하는 권한입니다.안드로이드에서 사용자의 위치 정보를 얻으려면 해당 권한을 사용자로부터 획득해야한다.권한 요청 절차는 사..
앱개발 심화 1주차 정리 - 1 SharedPreferences Preference란?프로그램의 설정 정보를 영구적으로 저장하는 용도로 사용된다.데이터를 XML 포맷의 텍스트 파일에 키-값 세트로 정보를 저장한다.앱을 삭제하면 저장된 데이터들도 전부 삭제된다. SharedPreferences란?SharedPreferences 클래스는 Preferences의 데이터를 관리하는 클래스로,변경사항을 액티비티간에 공유하며 데이터는 외부에서 읽을 수 없다. XML 파일 생성getSharedPreferences(name, mode)여러개의 SharedPreference 파일들을 사용하는 경우 해당 함수를 사용하여 SharedPreference 객체를 불러올 수 있다. name에는 프레퍼런스 데이터를 저장할 XM..
챌린지반 6주차 세션 정리 클린 아키텍쳐의 계층 구조 MVVM 패턴을 구현한다 가정하면 클린 아키텍쳐에서 UI는 액티비티, controller는 뷰모델, Entities는 데이터 클래스에 해당한다. 각 계층은 자신의 바로 다음 계층에만 의존하며 결론적으로 가장 안쪽에 위치한 Entites는 어떤 것도 의존하지 않도록 설계된다. 클린 아키텍쳐 구조의 재사용성클린 아키텍쳐 구조에서 의존성의 방향은 가장 외부의 UI 계층에서가장 내부의 엔티티 계층으로 흐르기에 내부 계층들은 UI와 독립적으로 설계된다. 따라서 viewModel, useCase, Entity는 재사용이 가능하다. 그러나 뷰는 자주 바뀌기 때문에 재사용이 어렵다는 문제가 있다. 그래서 비즈니스 로직을 캡슐화하여 뷰와 분리하는 개발방식을 지향한..
Compose 특강 2회차 정리 @Composable Composable이란?Composable 함수는 Compose 앱을 구성하는 일반함수이다.코틀린의 일반함수와 같이 결과값을 반환하지 않는다.사용자의 UI 요소를 전달하면 컴포즈 런타임 통해 렌더링 한다. 선언방식@Composablefun Greeting( name: String, modifier: Modifier = Modifier,) { Text( modifier = modifier, text = "Hello $name", )} 컴포즈 방식은 위젯을 생성하는 동시에 초기화를 진행할 수 있다. Modifier Modifier란?Composable의 크기, 레이아웃, 동작 및 모양을 변경하기 위해정의하는 ..
앱개발 숙련 팀 프로젝트 구현한 기능 상단 Toolbar의 icon을 클릭했을 때 layoutManager를 사용하여Grid/List 선택에 따라 보여주는 방식을 변경 처리하기 아이템 레이아웃 그리드 아이템은 프로필 이미지와 이름만을 세로 배치한다. 어댑터 클래스class ArticleAdapter() : ListAdapter(diffUtil) { private fun startProfileActivity(itemView: View, articleModel: ArticleModel) { val context = itemView.context val intent = Intent(context, ItemProfileActivity::class.java).apply { ..
Compose 특강 1회차 정리 Compose Compose란?안드로이드 UI를 선언적으로 구축하는 도구로 XML과 Kotlin을 사용하는기존 View방식으로 발생하는 다양한 문제 해결을 위해 등장하였다. View의 문제점View는 복잡한 UI를 다룰시 관리가 어렵고 XML과 Kotlin 요소간의밀접한 로직 결합으로 인해 가독성과 재사용성이 떨어진다는 단점이 있다. 그래서 CustomView 클래스를 만들어 UI 요소들이 이를 상속받도록 설계한다.그러나 이 방법도 새로운 UI 요구사항이 발생할 때마다 CustomView 클래스를수정해야해서 유지보수가 어려워지고 코드의 복잡성이 늘어난다는 문제가 있다. Compose의 역할이러한 문제를 해결하기 위해 Compose는 Kotlin 파일에서 선언적으로 UI..
챌린지반 세션 5주차 과제 과제 1번 과제 내용안드로이드 숙련주차 개인과제 때 만들었던 프로젝트에함수형 프로그래밍을 활용한 함수를 2개 이상 만든다. (변경도 가능) 점검사항- 해당 함수는 Pure function을 만족하는가- 해당 함수는 실행순서가 바뀌어도 정상동작하는가- 해당 함수는 Side Effect가 없는가한 마디로 만들어둔 함수 2개를 순수함수로 바꾸라는 과제이다. 데이터 초기화 함수private fun initData() { dataList.add(Item(...)) ...}기존에는 dataList라는 외부 변수에 사이드 이펙트를 발생시켜 데이터를 초기화했다. private fun initData(): MutableList { val dataList = mutableL..
챌린지반 5주차 세션 정리 LifeCycle 생명주기란?프로그래밍에는 생명주기(lifecycle)라는 것이 존재하는데 생명주기에는 프로그램이 생성되는 시점, 멈추는 시점, 종료되는 시점이 포함된다. Android Lifecycle은 3가지(Activity, Fragment, Service)가 존재한다. 생명주기의 필요성안드로이드는 생명주기 개념을 이용해 앱의 실행여부를 판단할 수 있다. 생명주기 메서드를 적절하게 이용한다면 불필요한 자원 낭비를 방지해메모리와 CPU자원을 확보할 수도 있고, 앱의 현재상태를 저장해 복원하는 것도 가능하다. 생명주기 메서드명메서드 이름 앞에 "on"이 붙어있으면 생명주기 관련 메서드라고 보면 된다. Activity 생명주기 생명주기 순서도 위 사진은 Activity의..