컴포넌트를 실행하려고 시스템에 전달하는 메세지컴포넌트를 실행하는 데이터를 담은 인텐트 객체를 시스템에 전달하여 컴포넌트 실행MainActivity -> DetailActivity 처럼 바로 실행하지 않고, MainActivity -> 시스템 (Intent) -> Det
컴포넌트는 애플리케이션의 구성요소로 여러개의 컴포넌트가 모여 하나의 애플리케이션을 이룬다. 안드로이드에서는 클래스로 컴포넌트를 개발하며, 하나의 클래스가 하나의 컴포넌트가 된다.일반 클래스개발자 코드에서 생명주기를 관리컴포넌트 클래스안드로이드 시스템에서 생명주기를 관
리눅스 기반 오픈 소스 소프트웨어 스택하드웨어 추상화 레이어 ( HAL ) : 자바 API 프레임워크의 하드웨어 기능 사용을 위한 표준 인터페이스 제공안드로이드 런타임 ( ART ) : 앱을 실행하는 역할 - DEX 파일로 빌드 .java --(컴파일)--> .cl
JetBrains에서 오픈소스 그룹을 만들어 개발한 프로그래밍 언어2011년 공개 이후 2017년 구글에서 안드로이드 공식 언어로 지정자바 = 인도네시아 섬 이름 / 코틀린 = 러시아 섬이름코틀린으로 JVM 기반 언어로 JVM에서 실행할 수 있다.코틀린 컴파일러(kot
val : value 변경 불가능var : variable 변경 가능추론 가능한 타입은 생략 가능최상위 혹은 클래스 멤버 변수는 초기값 할당이 필요하다. ( 함수 내부는 불필요 )만약 나중에 할당하려면 lateinit, lazy 키워드를 사용한다.lateinit은 va
표현식으로 사용 가능. 이때는 else문 필수데이터 없이 조건만 명시하거나 표현식으로 사용할 수 있다.1부터 10까지 더하기withIndex() 로 idx, value 모두 가져오기
코틀린에는 클래스 생성자를 선언부에 작성할 수 있어서 본문이 없는 클래스가 있다. ( 자바와의 차이 )constructor() 부분이 생성자이다.(예시는 보조생성자)코틀린 선언에는 new를 쓰지 않는다.constructor 키워드로 클래스 선언부에 선언클래스당 한개선언
코틀린의 클래스는 기본적으로 상속이 불가능하다.상속이 필요한 경우 상위 클래스는 open 키워드를 사용하여 허용하고, 하위 클래스는 :를 붙여 상속을 나타낸다.매개변수가 있을 경우 맞춰줘야한다.하위클래스에 보조생성자만 있을 경우 보조생성자에 작성한다.오버라이드가 필요한
data 키워드로 선언하며 자주 사용하는 데이터를 객체로 묶어준다. VO(value-object)클래스를 편리하게 사용할 수 있다.equals() 함수로 객체가 아닌 객체 내부 데이터를 비교할 수 있다. ( 주 생성자의 변수만 비교한다.)주로 주생성자의 매개변수를 va
중괄호를 사용해서 표현한다. {매개변수 -> 함수본문}반환값은 함수 마지막줄이다.return문 사용 불가능함수 뒤에 소괄호에 매개변수를 넣어 호출한다.혹은 선언 뒤에 바로 붙여서 호출한다.매개변수 없는경우\+화살표 생략매개변수가 1개일때기본식함수타입과 it키워드를 사용
data가 null이면 0반환하도록 널 안전을 확보한다.null 허용으로 선언한 변수 접근시 ?.로 접근한다.엘비스 연산자 ?:는 null인경우 뒤의 값을 반환한다.!!키워드는 객체가 널일 때 예외를 일으키도록 사용
앱을 구성하는 컴포넌트 4가지 ( 액티비티, 리시버, 프로바이더, 서비스 ) 중에서 화면을 출력하는 컴포넌트는 액티비티이다.액티비티는 화면을 출력하는 컴포넌트이지만, 그 자체가 화면은 아니다.화면에 내용을 표시하려면 뷰(View) 클래스를 이용해야한다. ( ex) Te
호출하려는 함수가 고차함수이고 마지막 전달인자가 람다함수이면 소괄호를 생략해도 된다.위 두 함수는 같은 의미이다.apply함수는 수신객체의 프로퍼티를 변환 후 해당 수신객체 자체를 반환하는데 주로 사용한다.TextView의 typeface와 text를 세팅한다.코드입력
(그림출처 : https://proandroiddev.com/the-life-cycle-of-a-view-in-android-6a2c4665b95e)액티비티 화면을 구성할 때 사용하는 클래스는 모두 View 클래스의 하위 클래스이다.View : 모든 뷰의 최상
코틀린의 변수는 자바와 다르게 필드가 아닌 프로퍼티이므로 변수에 setter와 getter가 내장되어 있다.필드(field) : 멤버변수라고 하며 실제값을 나타낸다.프로퍼티(property) : 속성이름으로 setter와 getter를 사용한다.위와 같은 java 클래
android:textandroid:textColorandroid:textSizeandroid:textStyleandroid:autoLink : web | phone | email 등을 설정하여 자동으로 링크가 된다. (여러개 가능)android:maxLinesandr
뷰를 가로나 세로방향으로 나열하는 레이아웃 클래스이다.android:orientation 속성에 따라 방향을 결정한다."vertical" : 세로"horizontal" : 가로 layout_weight 속성으로 여백의 가중치를 결정한다. 뷰의 크기를 "0dp" 로 설정
상대 뷰의 위치를 기준으로 정렬하는 레이아웃 클래스이다. 기존에 출력된 뷰를 기준으로 방향을 지정하여 배치한다.각 뷰는 아래 속성을 사용해서 상대적인 위치를 나타낸다. 배치 속성을 사용하지 않을 경우 겹쳐서 출력된다.layout_belowlayout_abovelayou
뷰를 겹쳐서 출력하는 레이아웃 클래스이다. 여러겹의 뷰를 겹친다음 visibility 속성을 통해 표시여부를 결정한다.FrameLayout에는 가로세로 방향 배치 혹은 상대 위치를 조절하는 속성 없이 뷰를 겹쳐서 쌓는다.visibility 속성을 통해 겹친 뷰를 표시하
행과 열로 구성된 테이블 화면을 만드는 레이아웃 클래스이다.orientation 속성을 통해 방향을 결정한다."vertical" : 세로 배치rowCount 속성값으로 줄바꿈"horizontal" : 가로 배치columnCount 속성값으로 줄바꿈 특정 좌표에 배치할
안드로이드 플랫폼이 아니라 androidx에서 제공하는 라이브러리이다. ConstraintLayout은 상대위치로 배치하는 RelativeLayout과 비슷하지만 더 많은 속성값을 지원한다. 안드로이드 스튜디오에서 XML 작성 뿐 아니라 화면을 마우스로 편집할 수 있도
앱에서 발생하는 사용자의 터치 이벤트를 처리하고 싶다면 액티비티 클래스에 터치 이벤트의 콜백 함수인 onTouchEvent()를 선언한다.콜백함수 : 어떤 이벤트가 발생하거나 시점에 도달할 때, 시스템에서 자동으로 호출하는 함수를 말한다.
각 뷰에는 별로의 이벤트를 제공해서 터치 이벤트 처리를 한다.뷰 이벤트는 이벤트 소스와 이벤트 핸들러로 역할이 나뉘며 이 둘을 리스너로 연결해야 한다.이벤트 소스 : 이벤트가 발생한 객체이벤트 핸들러 : 이벤트 시 실행할 로직이 구현된 객체리스너 : 위 둘을 연결해 주
리소스 = 변경되지 않는 정적인 콘텐츠 / 정적인 자원앱 리소스플랫폼 리소스개발자가 직접 추가한 리소스 모듈 내의 res 디렉토리 내에 drawable, layout, mipmap, values 라는 기본 4개의 디렉토리 생성res 안에 임의로 디렉토리를 만들 수 있고
특정 리소스를 특정 환경에서만 적용되도록 설정한다.리소스를 각 기기의 크기에 맞게 적용하는 작업을 코드에서 하지 않고 리소스 조건으로 지정하여 자동으로 환경에 맞게 적용한다.res폴더 내부에 각 해상도 별 폴더를 만들어서 같은 이름의 파일을 넣어준다.mipmap-mdp
안드로이드 시스템에서는 기기의 크기를 밀도별로 아래처럼 구분한다.(저밀도) ldpi, mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi (고밀도)dpi : dots per inch논리적인 단위를 사용할 경우, 안드로이드 시스템은 화면 밀도에 따라 컨텐츠의
최상위에 app 이라는 모듈이 있으며, 해당 모듈 하나 = 앱 하나이다. 하나의 프로젝트에서 여러 모듈을 관리한다.코끼리 모양의 Gradle 빌드 파일이며, 앱 빌드 설정을 등록한다.대부분의 빌드 설정은 모듈단위인 build.gradle(Module)에서 관리한다.플러
build.gradle 파일에 SDK 버전을 설정할 수 있다.minSdk : 설치 가능 최소 버전 ( 21 = 안드로이드 5.0 롤리팝 )targetSdk : 앱 개발 SDK 버전minSdk 버전보다 최신의 API를 사용하면 호환성을 고려해야 한다.안드로이드 API 문
앱의 특정 기능에 부여하는 접근 권한다른 앱이나 시스템에서 보호 중인 특정 기능을 사용해야 할 때 설정한다.반대로 다른 앱으로 부터 권한 없이 사용할 수 없도록 보호 할 때도 설정한다.<permission> : 보호하려는 앱의 manifest 파일에 설정<u
사용자와 상호 작용하는 대화상자토스트, 날짜 또는 시간 입력, 알림 창 등 포함커스텀 다이얼로그 생성 가능화면 아래쪽에 잠깐 보였다가 사라지는 문자열간단한 정보를 사용자에게 보여줄 수 있다.뜨는 시간 조절은 Toast.LENGTH_LONG, Toast.LENTH_SHO
안드로이드 시스템은 알림Notification, 알람Alarm, 벨소리Ringtone 등의 소리를 제공하며 RingtoneManager를 통해 얻을 수 있다.자체 녹음한 음원을 사용할 경우 res/raw 폴더에 넣고 MediaPlayer를 통해 재생한다.진동을 사용하려
상단바에 시스템 정보, 알림, 앱정보 등을 출력하는 것상태바는 원래 시스템에서 관리하므로 앱이 직접 제어를 할 수 없다. 따라서 앱에서 API를 통해 시스템에 요청을 해서 알림을 출력한다.NotificationChannel -> NotificationCompat.Bui
"""제트팩은 개발자가 관심 있는 코드에 집중할 수 있도록 권장 사항 준수, 상용구 코드 제거, 모든 안드로이드 버전과 기기에서 일관되게 작동하는 코드를 작성할 수 있도록 돕는 라이브러리 모음입니다."""플랫폼 API는 ART(Android runtime) 에서 제공하
AppCompatActivity화면 위쪽 타이틀 문자열이 출력되는 영역액티비티 창 = 액션바 + 콘텐츠 영역(setContentView() 출력 영역)내비게이션 아이콘(햄버거), 타이틀, 액션 아이템, 오버플로 메뉴 등으로 구성기본적으로 res/values 의 them
플랫폼 API 에 android.app.Fragment가 있으나, 가능하면 androidx.fragment 를 사용하도록 한다.프래그먼트는 액티비티화면을 구성하는 뷰이며 자체만으로는 화면에 아무것도 출력되지 않는다.액티비티처럼 동작하므로 액티비티에 작성할 수 있는 모든
목록 화면을 만들 때 사용한다.구성요소ViewHolder : 항목에 필요한 뷰 객체를 가진다.Adapter : 항목을 구성한다.LayoutManager : 항목을 배치한다.ItemDecoration(옵션) : 항목을 꾸민다.build.gradle 에 아래와 같이 등록한
스와이프 동작을 사용하여 화면을 넘길 수 있도록 만든다.2019년 이후로 viewpager와 별개로 viewpager2 라이브러리가 제공된다.뷰페이저2는 화면을 하나의 항목으로 보기 때문에 어댑터를 적용해야한다.RecyclerView.AdapterFragmentStat
드로어 레이아웃(DrawerLayout)은 왼쪽이나 오른쪽에서 손가락을 스와이프에 따라 밀려 나오는 기능을 한다.Activity 레이아웃 XML의 루트태그를 DrawerLayout으로 선언한다.DrawerLayout 하위에 2개의 뷰 태그를 선언한다.(태그 종류는 상관
구글의 머티리얼 디자인(material design)은 모바일, 데스크탑, 그 외의 다양한 장치를 아우르는 일관된 애플리케이션 디자인 지침이다.구글 소개"질감이 느껴지는 표면(tactile surfaces)과 대담하고 선명한 그래픽 디자인(bold graphic des
탭으로 구성하는 화면에서 탭 버튼을 배치하는 레이아웃이다.탭의 구성과 출력 방법, 탭 스크롤 등을 설정할 수 있다.유저가 TabLayout으로 구성한 탭 버튼을 선택하면 FrameLayout 위치에 탭의 내용을 출력한다.코드에서는 위와 같이 탭 목록을 추가할 수 있다.
액티비티 생명주기는 아래 그림과 같은 생명주기를 가지고 있다.상태변화에 따른 콜백함수를 제공하여, 해당 상태가 바뀔때마다 앱의 동작을 구현할 수 있다.(출처 : developer.android.com)활성 : 액티비티 화면이 출력되고 사용자가 이벤트를 발생시킬 수 있는
소프트 키보드
태스크 관리란 액티비티를 어떻게 생성하고 관리하는지를 제어하는 일을 말한다.기본적으로는 시스템에서 태스크를 관리하지만, 특정 상황에서 개발자가 액티비티의 태스크를 관리하여 설정할 수 있다.액티비티 태스크란 앱이 실행될 때 시스템에서 액티비티의 각종 정보를 저장하는 공간
이벤트 모델로 실행되는 컴포넌트사용자 이벤트가 아닌 부팅 등의 시스템 이벤트가 발생할 경우 실행된다.생명주기 함수는 onReceive() 하나로, 자동으로 호출된다.매니페스트에 등록하지 않고 동적으로 등록할 수 있다.위와같이 설정하면 시스템에서 리시버를 인식하게 되며,
부팅이 완료되었을 때, 특정 작업을 수행하고 싶을 경우 설정아래와 같이 부팅 완료 권한 설정화면 on off를 감지하는 리시버는 매니페스트에 등록하면 실행되지 않으므로, registerReceiver()를 통해 동적으로 등록해야 한다.배터리 낮음 / 정상 / 충전상태
오래 걸리는 작업을 백그라운드에서 처리할 수 있게 해주는 컴포넌트이다.서비스를 실행하려면 startService() 와 bindService() 두가지로 시스템에 인텐트를 전달해야한다.
서비스를 2가지로 호출하는 이유는 서비스를 이용하는 상황을 2가지로 구분하기 위함이다.startService() : 백그라운드 작업은 필요하나 액티비티와 데이터를 주고받을 일이 없는 경우 호출bindService() : 서비스와 액티비티가 상호작용을 해야할 경우 호출o
매니페스트에 등록한 리시버를 암시적으로 실행할 때는 같은 앱의 리시버든 외부 앱의 리시버든 실행되지 않는다.앱이 백그라운드 상태일 때 인텐트를 전달하면 오류가 발생한다. 서비스가 정상으로 실행되는 포그라운드 상황액티비티가 시작되든 일시 중지되든 상관없이 보이는 액티비티
앱이 백그라운드 상태일 때 작업 처리에 제약이 있지만, 잡 스케줄러를 통해 이를 보완할 수 있다.잡 스케줄러도 개발자가 만드는 서비스이므로 어떤 상황에서 실행해야하는지 조건을 명시해 줘야 한다.잡 스케줄러에 조건으로 명시할 수 있는 상황네트워크 타입 변경배터리 충전 상
콘텐츠 프로바이더는 앱끼리 데이터를 연동하는 컴포넌트로, 다른 앱의 데이터를 사용할 때 콘텐츠 프로바이더를 이용한다.이때, 데이터는 해당 앱의 데이터베이스나 파일, 앱의 메모리 등에 있으며 이런 데이터를 가져오거나 수정할 수 있다.이를 위해 내 앱의 데이터를 외부에 공
갤러리 앱에서 이미지를 사용할 때 고려해야할 사항안드로이드에서 이미지는 Drawable(주로 리소스 이미지), Bitmap 객체로 표현한다.Bitmap 객체는 BitmapFactory로 생성한다.BitmapFactory로 이미지를 생성할 때는 OOM 을 고려해야한다.G
2014년 구글에 인수된 모바일, 웹애플리케이션 개발 플랫폼서버리스 컴퓨팅 구현Authentication : 인증, 회원가입 및 로그인 처리Cloud Message : 알림 전송Firebase Database : 앱 데이터 저장 및 동기화Realtime Database