컴포넌트: 앱의 구성단위 , 컴포넌트를 조합하여 앱을 완성함 / 안드로이드에서 컴포넌트의 물리적인 모습은 클래스이다. 하지만 모든 클래스가 컴포넌트는 아니다. 클래스의 생명주기를 개발자가 가지고 있으면 일반 클래스 (예를들면 필요한 순간에 new 연산자로 생성해서 이용하고, 필요없으면 null을 대입해서 소멸시키면 일반 클래스) 이고
안드로이드 시스템이 가지고 있으면 컴포넌트이다.
컴포넌트의 종류
1. 액티비티(activity): 사용자 화면(UI)을 제공하는 컴포넌트
2. 서비스(service): UI없이 백그라운드에서 장시간 무언가를 수행할 수 있는 컴포넌트
3. 콘텐츠 프로바이더(content provider): 앱 간의 데이터 공유 목적으로 사용하는 컴포넌트
(예시: 개발자가 작성한 앱에서 주소록 데이터가 필요할 때 사용한다.)
4. 브로드캐스트 리시버(brodcast resive): 이벤트 모델로 수행되는 컴포넌트라고 이야기 한다.
(인텐트 원리를 이해하지 못 했으면 배터리가 부족하거나 시스템 부팅이 완료되는 등의 이벤트가 발생하였을 때, 이 이벤트를 받는 컴포넌트라고 이해하기)
리소스를 이용한 개발
리소스 외부화: 코드영역에 누가 언제 실행하든 항상 같은 결과가 나오는 정적인 콘텐츠를 코드에서 분리하여 개발하자
이유: 코드가 길어지고 지저분해져 유지보수에 어려움이 있기 때문에 유지보수에 도움이 되기 위해 분리 함
사용: 정적인 부분은 별도의 리소스 파일로 작성하고 코드에서 리소스를 얻어서 사용하자
Tip: 리소스 파일은 대부분 XML이다. UI는 대부분 XML이다.
R.java란? 리소스를 식별할 수 있게 해주는 것 혹은 리소스를 자바에 사용하기 위해 객체화 하는 것
R.java는 int형 변수로 나열되어 있는데 이는 res 폴더의 리소스들을 식별하기 위한 변수이다. 자바 코드에서는 R.drawable(res에 소속명).ic_message(res명)으로 사용한다.
안드로이드 스튜디오 파일들의 역할
1. manufests 안의 AndroidManifest.xml : 앱의 메인 환경 파일
(이곳에 정의된 대로 앱이 실행된다. / 개발자는 앱을 분석하거나 수정할때 여기를 봄)
2. java 안의 MainActivity: 화면 구성을 위한 액티비티 컴포넌트(실제 이 파일이 수행되어 화면에 UI 출력)
3. res : 리소스 파일
1-1. res 안의 drawable: 리소스 중 이미지 파일을 저장하기 위한 폴더
1-2. res 안의 layout: 리소스 중 UI 구성을 위한 레이아웃 XML 파일을 위한 폴더
1-3. res 안의 mipmap: 리소스 중 앱의 아이콘 이미지를 위한 폴더
1-4. res 안의 values: 리소스 중 문자열 값 등을 위한 폴더
● AndroidManifest.xml 파일에서 각 구성요소(코드)의 의미
1. <package="com.example.user.androidad">
앱의 식별자 정보 (각 Manifest파일당 하나만 존재해야 함)
2. <application>
앱의 구성요소를 등록하기 위한 태그
컴포넌트 클래스들은 AndroidManifest.xml에 등록해야 하며, <application> 태그의 하위 태그로 등록 해야 한다.
3. android:icon="" , android:label=""
사용자 스마트폰에 앱이 설치되었을 때 앱의 아이콘 이미지와 앱의 이름을 보여주는 속성 <application> 하위 태그로 등록
4. <activity android:name="">
앱에 액티비티 컴포넌트를 등록하기 위한 태그 / 각 컴포넌트의 개수에 맞춰서 정의해줘야 한다.
서비스, 프로바이더, 리시버는 <service>, <provider>, <resceiver>태그로 등록한다.
주의 : <activity>태그에서 name 속성은 생략할 수 없다.
5. <intent-filter>
사용자가 앱의 아이콘을 클릭했을 때 실행되는 액티비티를 설정하는 용도
● MainActivity.java
사용자가 앱을 클릭했을 때 실행되는 액티비티 클래스 (화면구성을 주목적으로 하는 클래스)
Tip: 액티비티 클래스들은 Activity를 상속받아 작성한다.
3장
런타임이란
안드로이드에서 사용되는 프로그램을 작동시키기 위한 가상머신(안드로이드 운영체제 아래 만들어진 런타임 환경의 VM)
UI 프로그램(Activity) 구현
앱 개발에서 UI를 구현하는 방법에는 자바 MainActivity에서 자바 코드로 작성하는 방법과 레이아웃 XML에서 작성하는 방법 두가지가 있다. 하지만 UI를 자바 코드로 구현하면 비 효율적이기 때문에 화면에 뷰 하나 정도만 출력하는게 아닌이상 레이아웃 XML을 이용한다.
레이아웃 (대치하는 방법, 뷰 그룹)
LinearLayout
LinearLayout: 뷰를 순서대로 가로나 세로 방향으로 나열한다. 따라서 다른 레이아웃에는 없는 방향을 지정하는 orientation 속성을 제공한다.
orientation: vertical (세로 방향으로 나열)
orientation: horizontal (가로 방향으로 나열)
layout_gravity:(부모의) left, right, top, bottom을 이용해서 부모의 영역내에 움직일 수 있다.
gravity: left, right, top, bottom을 이용해서 나 자신의 영역내에 움직일 수 있다.
RelativeLayout
RelativeLayout: 화면에 이미 배치된 뷰를 기준으로 다른 뷰의 위치를 지정하는 레이아웃
FrameLayout
FrameLayout: 레이아웃에 포함된 뷰들을 같은 영역에 겹쳐서 배치할 때 사용
"@+id/name"은 id값을 앱의 R.java 파일에 등록하여 이용하겠다는 의미이고 "@android:id/tabs"는 안드로이드 라이브러리의 R.java 파일에 등록 된 것을 사용하겟다는 의미이다.
TableLayout
TableLayout: 뷰를 테이블(table)구조로 나열하는 레이아웃
GridLayout
GridLayout: 뷰를 테이블(table)구조로 나열하는 레이아웃 이지만 TableLayout의 단점인 셀의 개수를 예상할 수 없거나 가변적일 때 화면 구성이 복잡해지는 부분을 자동 개행을 할 수있게 만든것이 GridLayout이다.
ConstraintLayout
ConstraintLayout: 상대위치에 따라 뷰의 배치를 제공한다. / 제약조건을 줄 수 있다. (최근에 가장 많이 사용함)
'프로그래밍 > Android Studio' 카테고리의 다른 글
안드로이드 퍼미션이란? (0) | 2022.02.01 |
---|---|
안드로이드 match_parent와 fill_parent 그리고 wrap_content 차이 (0) | 2022.01.25 |
안드로이드 테두리(border) 만들기 및 액션바 없애기 (0) | 2022.01.19 |
안드로이드 스튜디오 스마트폰 연결 방법 및 오류 해결 (0) | 2022.01.12 |
안드로이드 스튜디오 AVD Manager 오류 (0) | 2022.01.11 |