목록안드로이드 프로그래밍 (11)
개발자 끄적끄적
- 시스템이나 다른 앱이 방송하는 메시지를 받는 리시버 - 시스템 이벤트시 방송 - 시스템 부트 완료, 충전 시작, 네트워크 연결 변경, 문자 수신 등의 이벤트 - 문자 수신과 같은 민감한 정보는 권한을 필요로 한다 - 사용 방법 - 1. BroadcastReceiver 상속한 클래스, onReceive() 재정의 - 2. registerReceiver()로 1번의 클래스 객체 등록 - 이 때 수신할 방송 종류를 IntentFilter로 정의하여 포함 - 3. 더 이상 수신할 필요가 없을 때 unregisterReceiver() 호출 - 안드로이드에서 보통은 다른 앱에 데이터를 제공해주기 위해 - 표준화된 인터페이스, 적절한 데이터 은닉과 보호 기능을 제공 - ContentProvider에 접근하기 위한..
- 코틀린에서 병행(비동기) 수행을 프로그래밍하는 방법 - 병행 수행은 언제 ? - 네트워크나 I/O 등 비동기 처리가 필요한 경우 - 스레드를 직접 다루기보다는 코루틴을 사용하는 것이 편리하고 효율적 - 특징 - 가볍다 - 취소 가능 - 다양한 Jetpack에서 코루틴을 이용한 API 제공 - build.gradle - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1' - Coroutine 1은 Coroutine2의 작업을 시작하고 Non-Blocking 상태로 계속 실행 - Coroutine 2는 Coroutine 1에 대해 비동기(Asynchronous)로 수행 - Coroutine 1과 Coroutine 2는 병행(co..
- 앱 전용 파일 - 내부 저장소 또는 외부 저장소 사숑 - 다른 앱에서 접근 불가, 앱 삭제 시 함께 삭제 - Preference - 키 : 값 형식으로 저장, 사용 - 내부 저장소 사용, 다른 앱 접근 불가, 앱 삭제 시 함께 삭제 - 공유 파일 - 미디어나 문서 파일 - 외부 저장소 사용, 다른 앱과 공유 가능 - 공유 데이터 블롭(Shared Data Blobs) - 안드로이드 11부터(API 30) - 기계학습이나 미디어 재생 등에 사용할 매우 큰 공유 가능한 파일 생성/사용 - 데이터베이스 - Room 라이브러리를 이용하여 구조화된 형태로 데이터 저장 - 예전엔 SQLite로 사용, 지금은 Room 권장 - 내부 저장소(Internal Storage) - 파일 소유한 앱에서만 액세스, 다른 앱..
- 초기에 항목을 나열하는 컨테이너로 ListView가 있었다 - 효율적인 Recycler View가 등장하고 ListView는 사용 지양 - 구성요소 - RecyclerView.Adapter - ViewHolder를 생성 - ViewHolder와 데이터 연결 - RecyclerView.ViewHolder - 뷰를 담아두는 상자 - LayoutManager - 항목 뷰들의 배치를 결정, 리스트, 그리드 등 - RecyclerView - Adapter로부터 ViewHolder를 가져와서 LayoutManager에 의해 뷰를 배치 - RecyclerView.Adapter를 상속하여 CustomAdapter를 생성 - 일반적으로, 사용할 ViewHOlder를 같이 정의 class CustomAdapter(pr..
- 앱의 상단에 표시 - 타이틀, 액션아이콘, 옵션메뉴를 표시 - AppBar 또는 Action Bar라고 불린다 - 주의 : 테마에서 NoActionBar를 쓰면 App Bar가 나타나지 않는다 - 참고 : Toolbar - Jetpack 라이브러리로 제공되며, 레이아웃 내에 한 위젯처럼 취급 - 안드로이드 레이아웃 디자인에서 Toolbar(ID가 toolbar)를 추가 - Theme에서 parent를 NoActionBar로 변경 - Activity에서 setSupportActionBar(findViewById(R.i.toolbar)) - App Bar보다 더 유연하게 커스터마이즈 할 수 있다 - App Bar에 액션아이콘, 옵션메뉴를 하나의 메뉴로 관리 - App Bar에 타이틀 표시하고 남은 공간에..
- 앱 구성 요소, 사용자와 상호작용할 수 있는 화면 제공 - 안드로이드 앱 구성 요소 - 액티비티, 서비스, 브로드캐스트 리시버, 컨텐프 프로바이더 - 앱의 시작은 보통 액티비티에서 시작한다 - 앱에서 2개 이상의 액티비티가 포함될 수 있다 - 액티비티 AppCompatActivity(또는 Activity)를 상속하여 만든다 - AppCompatActivity는 androidx(Jetpack) 라이브러리에 포함된 것 - 안드로이드 SDK 버전에 상관 없이 동일한 기능을 제공해준다 - Activity는 안드로이드 SDK에 포함된 것 - 앱 호환성을 높이기 위해 AppCompatActivity 사용 권장 - setConetentView()를 이용하여 액티비티의 View를 draw - ex) class Ma..
- TextView는 텍스트를 출력하기 위한 위젯 - EditText는 텍스트를 입력받기 위한 위젯 - EditText는 TextView를 상속하기 때문에 TextView의 속성을 그대로 사용 - 텍스트 외형을 속성을 사용해 변경할 수 있다 - android:text 실제 표시될 텍스트 - android:textSize 텍스트 크기, 단위는 'sp'(dp보다는 sp를 권장) - android:textStyle 굵은글씨(bold), 기울임글씨(italic) - android:textColor 텍스트 색 - android:textAlignment 좌, 우, 중앙 정렬 - android:singleLine 강제로 한 줄 표시 - android:ellipsize 텍스트 출력할 공간이 부족할 경우 '...' 표시..
- 기기마다 다른 크기, 해상도 비율 - 크기, 해상도에 따라 이미지 크기를 다르게 사용 - 화면 크기, 비율에 따라 레이아웃을 다르게 구성 - 태블릿은 폰 보다 더 큰 화면 - 더 많은 위젯을 포함할 수 있다 - 화면 크기에 따라 위젯 크기도 자동으로 조정 - 프래그먼트(Fragment)활용 - 기기 방향 변화에 따른 디자인 - 가로 보기와 세로 보기에 따라 다르게 디자인 - 또는 방향을 고정하여 한가지만 디자인 - UI를 구성하는 요소는 위젯과 레이아웃으로 나눌 수 있다 - 위젯 - 정보를 출력, 입력 받기 위한 UI 구성 요소 - TextView, Button, EditText, Checkbox 등 - 레이아웃 - 사용자 인터페이스에 대한 시작적 형태를 계층적 구조로 정의 - 레이아웃(부모)과 포함..
- 함수형 프로그래밍이란 - 자료 처리를 수학적 함수의 계산으로 다루고 - 상대 변경(Changing state)과 가변 데이터(Mutable data)를 쓰지 않는 프로그래밍 패러다임 - 명령형 프로그래밍(Imperative programming)에서는 상태를 바꾸는 것을 강조하는 것과 달리 함수형 프로그래밍은 함수의 응용을 강조 - 1930년대에 계산가능성, 결정문제, 함수정의, 함수응용과 재귀를 연구하기 위해 개발된 형식체계인 람다 대수(Lambda-calculus)에 근간을 두고 있다 - 수학적 함수와 명령형 프로그래밍에서 사용되는 함수 - 명령형 프로그래밍의 함수 - 프로그램의 상태 값을 바꿀 수 있는 부수 효과가 생길 수 있다 - 참조 투명성이 없고, 같은 코드라도 실행되는 프로그램의 상태에 ..
- 단순한 클래스 정의 - class 클래스_이름(생성자 인자 리스트) - 생성자 인자들 중 val/var이 붙은 것은 클래스의 속성이 된다 - 자바와 다르게 - 코틀린은 기본적으로 public class - 객체를 생성할 때 new 키워드를 쓰지 않는다 - 속성 접근 메소드를 자동으로 만들어주며, 커스텀 접근 메소드를 만들 수도 있다 - 자바의 인터페이스와 비슷하다 - 구현이 있는 메소드 정의 가능 - 자바처럼 default를 붙이진 않는다 - 인터페이스 구현 클래스의 메소드 구현에서 override를 반드시 써야한다 - 클래스르 상속받을 때에도 메소드 오버라이드할 때 override를 쓴다 - interface, abstract class는 기본적으로 상속(구현), 메소드 오버라이드 가능 - clas..
- 편리함을 추구하는 언어 - 간결함을 추구하는 언어 - 명령형 언어, 객체지향 언어에 함수형 언어 개념 - 실용성 - 이미 검증되고 많이 사용되는 언어 기능을 채택 - 간결성 - 타입 추론(타입을 명시하지 않아도 된다), getter/setter - 안정성(Null Safety) - Interoperability(자바와 100%호환) - 다양한 플랫폼 지원 - JVM 기반의 서버, 안드로이드, 코틀린 자바스크립트, 코틀린-native IOS, MacOS, AndroidNDK, Windows, Linux - 정적 타입 언어 - statically typed lang. (java, kotlin) - dynamically typed lang. (python) - 함수형 언어(Functional Lang) -..