460 likes | 892 Views
안드로이드의 아키텍처. 효율적이고 안정적인 자원 관리를 위해 계층을 구성 하위에서는 저수준 지원 요소들이 있고 상위로 올라갈수록 응용 요소들이 있다 . 추상화와 보안을 위한 인접한 계층끼리만 통신할 수 있다 . . ⑤. ④. ②. ③. ①. 안드로이드 아키텍처. 안드로이드의 아키텍처. ① : 리눅스 커널 백그라운드 스레드 , 메모리 관리 , 보안 , 디바이스 드라이버 등의 저수준 관리 기능을 담당함 . 디바이스 드라이버의 지원이 광범위함 . ② : 라이브러리
E N D
안드로이드의 아키텍처 • 효율적이고 안정적인 자원 관리를 위해 계층을 구성 • 하위에서는 저수준 지원 요소들이 있고상위로 올라갈수록 응용 요소들이 있다. • 추상화와 보안을 위한 인접한 계층끼리만 통신할 수 있다. ⑤ ④ ② ③ ① 안드로이드 아키텍처
안드로이드의 아키텍처 ① : 리눅스커널 백그라운드 스레드, 메모리 관리, 보안, 디바이스 드라이버 등의 저수준 관리 기능을 담당함. 디바이스 드라이버의 지원이 광범위함. ②: 라이브러리 라이브러리는 장비의 전반적인 속도를 결정하는 중요한 요소임. • C로 작성되어 있음. • 안드로이드 라이브러리 종류 • BSD 파생 libc라이브러리 • 2D 그래픽을 위한 서피스 관리자 및 SGL • 3D 그래픽을 위한 OpenGL • 벡터 폰트 출력을 위한 FreeType • 오디오, 비디오 재생을 위한 미디어 지원 • 데이터베이스 지원을 위한 SQLite • 인터넷 브라우징을 위한 SSL과 크롬, 사파리에 채용된 WebKit
안드로이드의 아키텍처 ③: 런타임 달빅 가상 머신과 자바 코어 라이브러리로 구성되어 있음. 안드로이드는 자바 가상 머신을 직접 사용하지 않으며모바일 환경에 최적화한 달빅(Dalvik) 가상 머신을 사용함. 각 프로세스별로 별도의 달빅 가상 머신이 할당되므로 안정성이 높고 메모리 사용량을 줄여 복수개의 가상 머신도 효율적으로 동작하도록 설계되었음. • 달빅(Dalvik)의 어원 달빅(Dalvik)으로 명명한 사람은 구글의 댄 본스타인(Dan Bornstein)이라는 사람인데 달빅이란 이름은 본스타인이 살던 아이슬란드의 한 물고리를 잡는 마을의 이름을 딴 것이다.
안드로이드의 아키텍처 ④: 프레임워크 안드로이드의API. 응용 프로그램들은 하위의 커널이나 시스템 라이브러리를 직접적으로 호출할 수 없으며 API를 통해서 기능을 요청해야 함. API는 하드웨어 액세스를 추상화하며 UI 제작에 필요한 위젯을 정의하고 시스템 라이브러리와 통신할 수 있는 래퍼를 제고함. ⑤ : 응용프로그램 인터넷 브라우저, 바탕화면, 주소록 등 플랫폼과 함께 설치되는 애플릿들은 물론이고 마켓에서 다운받아 설치하는 게임, 유틸리티 등도 모두 이 수준에서 실행됨.
안드로이드 실행 • 안드로이드의 응용 프로그램 • 안드로이드 응용 프로그램은 적절한 권한만 있으면 누구든지 인스턴스화할 수 있는 4개의 컴포넌트로 구성된다. • 인스턴화할 수 있는 4개의 컴포넌트 : 액티비티, 서비스, 방송 수신자, 콘텐트 제공자 [액티비티] • 사용자 인터페이스를 구성하는 기본 단위다. 눈에 보이는 화면 하나가 액티비티이며여러개의뷰들로 구성된다. • 응용 프로그램은 필요한 만큼의 액티비티를 가질 수 있으며 그 중 어떤 것을 먼저 띄울지를 지정한다. [서비스 ] [방송수신자(Broadcast Receiver) ] [콘텐트 제공자(Content Provider)] • 응용 프로그램은 액티비티, 서비스, 방송 수신자, 콘텐트 제공자 중 일부만을 가질 수도 있고 여러 개를 가질 수도 있다.
프로젝트 구성 strings.xml : 문자열 정의 main.xml : 정의된 문자열을 Linear Layout의 Text View에 넣는다 • AndroidFirst.java: setContentView메서드 호출, 레이아웃을 액티비티에 배치 R.java : 각 파일들이 참조하는 객체의 ID정의 AndroidFirst.java R.java main.xml strings.xml 액티비티 생성 R.layout.main레이아웃 배치 main, hello등의 명칭 정의 LinearLayout TextView @string/hello Hello = Hello World, AndroidFirst
레이아웃 (Layout) XML소스로 구성 XML레이아웃과 코드 레이아웃 모두 사용 가능
XML레이아웃의 장점 • 코드와 데이터가 완벽하게 분리되므로 개발자와 디자이너의 분담 작업이 용이하다. • 조건에 따라 레이아웃을 통째로 교체할 수 있으므로 호환성 확보, 국제화에 유리하다. • 레이아웃만 수정할 때는 컴파일하지 않아도 되므로 개발 속도가 빨라진다. • 구조와 속성을 함축적으로 기술할 수 있으며 레이아웃 재활용도 가능하다.
레이아웃 (Layout) - 4 -
레이아웃 (Layout) • Widgets - 4 -
레이아웃 (Layout) - 4 -
1. 뷰 (View) • 뷰의 계층 • 안드로이드 응용 프로그램의 화면을 구성하는 주요 단위인 액티비티는 화면에 직접적으로 보이지 않으며, 액티비티 안의 뷰가 사용자를 대면하는 실체이다. • 여러 개의 뷰가 모여 하나의 액티비티를 구성하고, 이러한 액티비티가 모여 하나의 응용 프로그램이 된다. • 레이아웃은 액티비티 안에 뷰를 배치하는 기법을 말한다. • 뷰 • 위젯: 직접적으로 보이며 사용자 인터페이스를 구성하며, 흔히 컨트롤이라고 부른다. • 뷰 그룹 : 뷰를 담는 컨테이너 역할을 하며, 이 부류의 클래스들을 레이아웃이라고 한다. • 뷰 그룹이면서도 위젯처럼 사용되기도 하는 클래스도 있다. • 서브 클래스는 슈퍼 클래스의 모든 속성을 상속받는다.
1. 뷰 (View) • 위젯의 계층 • View도 자바 클래스의 일종이므로 루트인 Object로부터 파생된다. • View로부터 직접 파생되는 모든 클래스가 바로 위젯이며 스스로를 그릴 수 있는 능력을 가지고 있다. Object AnalogClock EditText EditText AutoCompleteTextView View TextView Button CompoundButton Chronometer CheckBox DigitalClock RadioButton ImageView ImageButton ToggleButton SurfaceView GLSurfaceView VideoView SeekBar ProgressBar AbsSeekBar RatingBar
1. 뷰 (View) Object FrameLayout ScrollView, HorizontalScrollView TabHost, TimePicker, DatePicker • 뷰 그룹의 계층 • View로부터 파생된 ViewGroup의 서브 클래스이다. • 다른 뷰들을 차일드로 포함하며 차일드를 정렬하는 기능을 가진다. View ViewAnimator ViewFlipper TextSwitcher ViewGroup ViewSwitcher ImageSwitcher AbsoluteLayout WebView RelativeLayout RadioGroup, ZoomControls LinearLayout TableLayout, TableRow TabWidget AdapterView AbsListView ListView GridView AbsSpinner Spinner Gallery
1. 뷰(View) • View의 속성 • id • 뷰를칭하는 이름을 정의하며, 코드나 XML문서에서 뷰를 참조할 때 id를 사용하므로 직관적인 이름을 붙이는 것이 좋다. • 형식 : @[+]id/ID - @ : id를 리소스(R.java)에 정의하거나 참조한다는 뜻이며, 무조건 붙여야 한다. - + : ID를 새로 정의한다는 뜻이며, 참조 시는 생략 가능하다. - id : 예약어 - / : 뒤에 원하는 이름을 작성하되, ID는 고유한 명칭이므로 명령 규칙에 맞아야 하며, 뷰끼리 중복되어서는 안된다. ex) android:id=“@+id/name” : 텍스트 뷰에name이라는 id를 부여함. • XML문서에 ID를 지정하면 이 이름이 R.java에 정수형 상수로 정의된다. • 코드에서 뷰를 참조할 시 findViewById메서드 호출, 인수로 참조할 뷰의id를 전달한다. • 모든 뷰에id를 의무적으로 지정할 필요는 없으며, 코드에서 참조할 필요 없는 위젯은 보통 id를 생략한다.
1. 뷰 (View) • View의 속성 • layout_width, layout_height • 뷰의 폭과 높이를 지정하며, 수평, 수직 각 방향에 대해 크기를 지정할 수 있다. • 속성값으로 아래의 세 가지 중 하나의 값을 가진다. - fill_parent : 부모의 주어진 크기를 다 채운다. - wrap_content : 내용물의 크기만큼만 채운다. • ex) “버튼”이라는 캡션을 가지는 버튼 배치
1. 뷰 (View) • View의 속성 • background • 뷰의 배경을 지정하며, 색상 및 이미지 등의 여러 가지 객체로 지정 가능하다. • 색상 지정 시 네 가지 형식이 적용되며, 배경뿐만 아니라 색상을 지정하는 모든 속성에 적용된다. - #RGB - #ARGB - #RRGGBB - #AARRGGBB ex) #ff0000 (#f00): 빨간색,#0000ff : 파란색 • padding • 뷰와 내용물간의 간격을 지정한다. (즉 안쪽 여백) • padding 속성 값을 지정하여 4방향에 대한 여백을 조절할 수 있다. • 속성값 : paddingLeft, paddingTop, paddingRight, paddingBottom
1. 뷰 (View) • View의 속성 • visibility • 뷰의표시 유무를 지정하며, 속성값으로 아래의 세 가지 중 하나의 값을 가진다. - visible : 보이는 상태임. - invisible : 숨겨진 상태이되 자리는 차지함. - gone : 숨겨지며 자리도 차지하지 않음. • clickable, longClickable • 마우스 클릭 이벤트를 받을 것인지, 롱클릭 이벤트를 받을 것인지를 지정한다. - click: 손가락으로 뷰를 누름 - longClick: 손가락으로 뷰를 누른 채 잠시 기다림 • 진위형이므로 true또는 false둘 중 하나의 값을 지정한다. • focusable • 키보드 포커스를 받을 수 있는지를 지정한다. • 디폴트 값으로 false가 설정되어 있으며, 필요 시 속성을 true로 변경한다. • 에디트나 버튼처럼 사용자의 입력이 필요한 파생 클래스는 디폴트로 true가 지정되어 있다.
1. 뷰 (View) • TextView • 문자열 출력 및 입력받는 위젯 • 입력 기능은 숨겨져 있으며 서브 클래스인 EditText에서 활성화된다. • text • 텍스트 뷰의 가장 중요한 속성으로 출력할 문자열을 지정한다. • 리터널 및 리소스로 대입한다. • textColor • 문자열의 색상을 지정하며, 디폴트는 불투명한 밝은 회색이다. • #RRGGBB나 #AARRGGBB형식으로 각 색상 요소들의 강도를 지정한다.
1. 뷰 (View) • TextView • textSize • 텍스트의 폰트 크기를 지정하며, 실수 타입으로 지정할 때 숫자 뒤에 sp, dp, px, in, mm 등의 단위를 같이 지정한다. • textStyle • 폰트의 속성을 지정한다. • normal, bold, italic중 하나를 쓰거나 ‘|’로 묶어 두 개 이상의 상수값을 지정할 수 있다. ex: “bold|italic”, “normal|italic” • typeFace • 글꼴의 모양을 지정하며, normal, sans, serif, monospace중 하나로 선택 가능하다. • 모바일 환경에서 내장된 폰트 개수에 제약이 있다. • width, height • 텍스트 뷰의 폭과 높이이며 크기값과 단위를 같이 지정한다. • 텍스트 뷰는 단독으로 존재하는 경우는 거의 없고 대부분 레이아웃 안에서 차일드로 존재하기 때문에 이 두 속성은 거의 사용되지 않는다.
1. 뷰 (View) • ImageView • 아이콘이나 비트맵을 출력하는 위젯으로, 리소스, 파일 등은 물론이고 컨텐트 프로바이더나 웹 상의 이미지로도 표시 가능하다. • src • 출력할 이미지를 지정하는 가장 중요한 속성이다. • 주로 리소스에 이미지를 복사해 두고 @drawable/ID 형식으로 이미지를 출력하는 방법을 사용한다. • maxHeight, maxWidth • 이미지가 출력될 최대 크기를 지정한다. • adjustViewbounds • 이미지의 종횡비를 맞추기 위해 이미지 뷰의 크기를 적당히 조정할 것인가를 지정하며, 속성값은 true나 false중 하나를 사용한다. • 그 외 • cropToPadding, tint, scaleType
1. 뷰 (View) • ImageView • jpg, png, gif 등의이미지 포맷을 지원한다. • SDK1.6이후 해상도 별로 세 개의 폴더가 존재하며, 해상도 별로 각 폴더에 이미지를 넣어두면 운영체제가 사용할 이미지를 결정한다. 고해상도 이미지 저해상도 이미지 중해상도 이미지
1. 뷰 (View) • Button, EditText • View,TextView의 서브 클래스이며 고유의 속성은 따로 가지지 않는다. • Button :사용자로부터 명령을 입력 받음 • EditText:문자열을 입력 받음
2. 리니어 레이아웃 • LinearLayout • 차일드뷰를 수평, 수직으로 일렬 배치하는 레이아웃으로, 가장 단순하면서 직관적이며 사용빈도가 높다. • orientation • 뷰의 배치 방향을 결정하는 속성. • vertical : 차일드를 위에서 아래로 수직으로 배열 • horizontal : 차일드를 왼쪽에서 오른쪽으로 수평 배열 버튼1 버튼1 버튼2 버튼3 버튼2 버튼3 [ vertical ] [ horizontal ]
2. 리니어 레이아웃 • LinearLayout • 텍스트뷰를 추가함 • 텍스트뷰의 텍스트는 문자열리소스로 • 각 속성변경함 • 글자색, 배경색, 글자크기, 글자스타일 • 글자체
2. 리니어 레이아웃 • baselineAligned • 높이가 다른 차일드뷰를 수평으로 정렬 시 하단 정렬 지정 (디폴트 true) [ base1 ] [ base2 ]
2. 리니어레이아웃: gravity • 내용물의 위치를 지정하며, 수평, 수직 방향에 대해 각각 정렬 방식을 지정할 수 있다. • 두 속성을 같이 지정할 때는“|”연산자를 이용하며, 이 때 연산자 양쪽으로 공백이 전혀 없어야 한다. • 각 정렬 방식은 비트 필드로 정의, center, fill은 수평, 수직 정렬 상태 플래그의 조합으로 정의되어 있다.
2. 리니어 레이아웃 • Gravity 실습 android:textSize=“30pt” android:textColor=“#00ff00”
2. 리니어 레이아웃 layout_gravity: 뷰를부모의 어디에 둘 것인가를 결정하는 속성
2. 리니어 레이아웃 • layout_weight • 중요도에 따라 차일드의 크기를 균등 분할한다. • 중요도가 0이면 자신의 고유한 크기만큼, 1 이상이면 형제 뷰와의 비율에 따라 부모의 영역을 균등하게 배분한다. [ weight2 ] [ weight1 ]
2. 리니어 레이아웃 • layout_weight [ weight3 ]
2. 리니어 레이아웃 • padding, margin • 여백과 관련된 속성 • padding • 뷰와 내용물간의 간격 지정 • 뷰의 입장에서 볼 때 안쪽 여백을 뜻하며 뷰 자체의 속성 • 4면 모두 동일한 여백이 지정되며, paddingLeft, paddingTop, paddingRight, paddingBottom으로 4면의 개별 여백 지정 가능 • margin • 뷰와부모와의 간격을 지정하며, 근처에 형제 뷰가 있으면 동일한 간격으로 여백 생성 • 뷰의 입장에서 볼 때 바깥 여백을 뜻하며 레이아웃의 속성 • 4면 모두 동일한 여백이 지정되며, layout_marginLeft, layout_marginRight, layout_marginTop, layout_marginBottom으로 4면의 개별 여백 지정 가능
2. 리니어 레이아웃 • padding, margin Padding과layout margin 속성 변경해보기
2. 리니어레이아웃 : 중첩 • 상단의 레이아웃에 있는 텍스트뷰는 바탕색만 있으며 text의 내용은 없다. • 색도 리소스에 정의하여 사용한다. • 하단의 레이아웃에 있는 텍스트뷰는 텍스트에 각각 색을 지정하였다. • 사용한 문자열은 모두 리소스에 정의하여 사용한다. 글자크기도 모두 지정한다. • - 상단과 하단의 레이아웃 weight은25:15로 지정한다. • - 화면 내용에 맞게 뷰들의 속성을 변경한다.
3. RelativeLayout • 위젯과 부모와의 위치 관계 또는 위젯끼리의 관계를 지정함으로써 뷰를 배치 • 위젯끼리의 관계 지정을 위하여 기준이 되는 위젯에id를 반드시 지정해야 한다. • 리소스 컴파일러는 빠른 배치를 위해 위젯간의 관계를 한번에(one pass) 읽으며, 특정 뷰가 다른 뷰의 위치에 종속적일 때 기준이 되는 뷰를 먼저 정의해야 한다. ex: A를 B의위에 배치하고 싶다면 XML문서상에 B를 먼저 기술한 후 A를나중에 기술해야 한다. <RelativeLayout> <B android:id=“@+id/b”/> <A android:id=“@+id/a”/> </RelativeLayout> A B
3. RelativeLayout • 레이아웃이 배치되는 순서 철수 철수 영희 철수 영희 철수 영희 몽룡 몽룡 춘향 좌상단에 철수 오른쪽에 영희 밑에 부모의 오른쪽에 몽룡 왼쪽에 몽룡의 아래쪽 정렬
3. RelativeLayout ▶ - 에디트텍스트를 기준으로 배치한다. - [확인] 버튼을 [취소] 버튼과 에디트텍스트를 기준으로 배치한다. - [취소] 버튼의 오른쪽 변을 부모 뷰로 맞춘다. 에디트텍스트를기준으로 사용
3. RelativeLayout • RelativeLayout예제– name card • 좌상단의 이미지를 제일 먼저 배치, 그 아래 삭제 버튼을 배치한다. • 부모의 위쪽 변에 이름을 붙이면서 동시에 이미지의 오른쪽에 배치한다. • 부모의 오른쪽에 전화번호를 붙이되 이름과 베이스를 맞추어 가지런히 한다. • 설명 문자열은 이름 밑에 붙이되 왼쪽 변을 이름과 나란히 맞춘다.
4. FrameLayout • 차일드를배치하는 규칙 없이 모든 차일드는 프레임의 좌상단에 나타나며, 차일드가 두 개 이상일 때는 추가된 순서대로 겹쳐서 표시된다. • 이미지뷰를 이용하여 실습해 보기
5. TableLayout • 표형식으로 차일드를 배치하는 레이아웃으로 바둑판 모양이다. • 테이블은 임의 개수 TableRow객체로 구성되며, TableRow안에 임의 개수 열이 배치되고, 이를 셀이라 부르며 셀에는 차일드 뷰 하나가 들어간다. • 테이블의 전체 크기는 행(TableRow)*열(셀)이 된다. • 테이블의 차일드들은 정해진 규칙에 따라 크기가 결정되므로 크기 속성에 대한 제약이 있다. • TableRow객체의 높이는 항상 wrap_content로 강제됨. : 여러 개의 행이 한 테이블에 공존해야 하기 때문이다. • layout_width속성은 따로 지정할 수 없으며 항상 fill_parent로 가정됨. : 셀에 배치되는 자식 뷰는 무조건 주어진 셀 안에 배치되기 때문이다. • 각 행의 열들은 0에서부터 시작하는 번호가 자동으로 지정된다. 행에서 남아 사용되지 않는 열을 다른 위젯이 확장하여 사용할 수 있고, 특정 위젯에layout_span속성을 적용하면 해당 위젯을 2개 이상의 열에 확장하여 배치할 수도 있다. 또한 특정 위치의 열에 위젯을 배치할 수도 있다
6. 레이아웃 관리 • 레이아웃 중첩 • 레이아웃은 뷰의 컨테이너이므로 View로부터 파생된 모든 객체를 레이아웃 안에 놓을 수 있으며, 레이아웃 자체도 View의 파생 클래스이므로 레이아웃끼리 중첩시킬 수 있다. • 레이아웃 중첩 예제– NestLayout • 제일 바깥에 LinearLayout, 전체는 수직으로 뷰가 배열된다. • 수직 LinearLayout안에 TextView, Table, 수평 LinearLayout이 일차 차일드로 배치된다. • Table은 다시 2행 3열의 셀로 분할되고, 각 셀에는 텍스트 뷰가 들어있다. • 수평 LinearLayout안에는 세 개의TextView가 배치되어 있다. TextView 수직 리니어 테이블 TextView TextView TextView 테이블 로우 TextView TextView TextView 수평 리니어 TextView TextView TextView