2010년 2월 8일 월요일

[02] 주요 개념

$1. 전체구조

 

안드로이드 오픈 소스 소프트웨어 스택을 구성하는 주요 계층과 구성요소를 포함한 전반적 시스템 아키텍처를 살펴보자.

 

 

각 층은 그 바로 아래 계층에서 제공하는 서비스를 이용한다.

 

1) 리눅스 커널

 

안드로이드는 리눅스 커널이라는 견고하고 검증된 토대 위에 구축되며, 이는 내부의 메모리관리, 프로세스 관리, 네트워킹, 운영체제 시스템 서비스 등에 이용된다.

 

2) 내장 라이브러리

 

커널 바로 위에 내장 라이브러리가 있다. 이 공유 라이브러리는 모두 C 또는 C++로 쓰여 있고 핸드폰에 사용되는 특정 하드웨어를 위해 컴파일되어 핸드폰 공급업체에 의해 폰에 미리 설치된다.

 

  • surface manager
    안드로이드는 매우 간단한 복합 윈도 매니저를 사용한다.
  • 2D와 3D 그래픽
    안드로이드에서는 2차원요소와 3차원 요소가 하나의 사용자 인터페이스에서 결합될 수 있다.
  • 미디어 코덱
    안드로이드는 동영상을 재생할 수 있고, 오디오 녹음과 재생이 가능한데 AAC, AVC, H.263, MP3, MPEG-4등의 다양한 포맷을 지원한다.
  • SQL 데이터베이스
    안드로이드는 경량의 SQLite 데이터베이스 엔진을 갖추가 있다. 이는 파이어폭스와 애플사의 아이폰에도 사용되는 데이터베이스다.
  • 브라우저 엔진
    HTML 콘텐츠를 신속하게 디스플레이하기 위해 안드로이드는 Webkit라이브러리를 사용한다. 이는 구글 크롬 브라우저, 애플의 사파리, 아이폰, 노키아 S60등의 플랫폼에 동일하게 사용되는 엔진이다.

3) 안드로이드 런타임

 

커널위에는 안드로이드 런타임인 달빅(Dalvik) VM과 코어 자바 라이브러리 등이 포함된다. 달빅 VM은 모바일 다바이스용으로 최적화해 구현된 구글의 자바 격이다.

 

달빅은 구글의 댄 본스타인이 만든 VM이다. 달릭이란 결국 낮은 메모리용으로 최적화된 자바 VM이다. 여러개의 VM 인스턴스가 한 번에 실행 가능하며, 내부 운영체제의 장점으로 보안과 프로세스의 격리가 가능하다. 달빅이라는 이름은 본스타인 조상이 살던 아이슬란드의 한 물고기 잡는 마을의 이름을 딴 것이다.


달빅과 전형적인 자바와의 차이점은 다음과 같다.

 

  • 달빅은 .dex파일을 실행시키는데 이 파일은 .class와 .jar파일이 컴파일 시점에 변환된 것이다. .dex파일은 클래스 파일보다 콤팩트하고 효율성이 높기 때문에 안드로이드가 사용될 적은 메모리와 베터리로 작동하는 환경에 적합하다.
  • 안드로이드에 들어 있는 코어 자바 라이브러리는 자바 스탠더드 에디션 라이브러리와 자바 모바일 에디션 라이브러리와는 다르지만 중복되는 부분이 상당히 있다.

4) 애플리케이션 프레임워크

 

어플리케이션을 만들 때 사용될 높은 수준의 빌딩 블록이 여기에서 제공된다. 필요시 개발자가 이를 확장시킬 수 있으며, 프레임워크의 가장 중요한 부분은 아래와 같다.

 

  • activity manager
    애플리케이션의 생명주기를 제어하고 사용자 내비게이션을 위해 'back-stack'을 유지한다.
  • content manager
    주소록과 애플리케이션 사이에서 공유되는 정보를 요약한다.
  • resource manager
    리소스란 프로그램의 코드 외 모든 부분인데 이를 관리하낟.
  • location manager
    안드로이드 폰은 항상 자신의 위치를 파악하고 있다.
  • notification manager
    도착 메시지, 약속, 근접성 알림 등의 사건을 사용자에게 방해되지 않는 방식으로 전달한다.
안드로이드의 강력한 특징 중 하나는 모든 애플리케이션이 동일한 수준으로 실행된다는 것이다. 이말은 시스템 애플리케이션이 개발자가 사용하는 것과 동일한 공개 API를 거쳐야 한다는 뜻인데, 원한다면 안드로이브가 기본 시스템 애플리케이션 대신 개발자가 만든 애플리케이션을 사용하게 만들 수 있다.


5) 애플리케이션

 

안드로이드 아키텍쳐의 최상위 계층이며, 최종사용자는 오직 이 어플리케이션만을 보게 된다.

 

$2. 살아있네!

 

안드로이드에는 foregraund 애플리케이션이 하나며, 상태 줄을 제외한 전체 스크린을 차지한다. 사용자가 애플리케이션을 실행하면, 안드로이드는 그 프로그램을 시작한 후, 포어그라운드에 놓는다. 거기에서 사용자는 다른 애플리케이션을 호출하거나 같은 애플리케이션 내의 다른 화면을 호출한다. 이 모든 프로그램과 화면은 시스템의 액티비티 매니저에 의해 애플리케이션 스택에 기록한다.

 

1) 프로세스는 애플리케이션과 다른다.

 

내부적으로 개별 사용자 인터페이스 화면은 Activity 클래스에 의해 표현된다. 액티비티는 생명주기를 갖고 있으며, 어플리케이션은 한 개 이상의 액티비티와 이것을 담을 리눅스 프로세스를 합친 것이다.

 

주의할것은 안드로이드상에서, 애플리케이션은 해당 프로세스가 죽여졌을 때조차도 살아 있을 수 이따. 즉, 액티비티의 생명주기가가 프로세스의 생명주기와 긴밀하게 결합되어 있지 않다. 프로세스란 액티비티를 자유롭게 담을 수 있는 그릇, 즉 컨테이너이다.

 

2) 액티비티 생명주기

 

안드로이드의 액티비티는 아래 그림의 여러 상태중 하나에 놓여 있다. 이는 개발자가 조정할 수 없으며 시스템에 의해 관리된다. 하지만 개발자는 상태가 변경될 때 onXX() 메서드가 호출되는 방식으로 알 수 있다.

 

 

Activity 클래스에서 해당 메소드를 적당하게 오버라이드하면, 안드로이드는 이를 적당한 시기에 호출할 것이다.

 

$3. 구성요소

 

1) 액티비티

 

액티비티란 사용자 인터페이스 화면을 일컫는다. 애플리케이션은 프로그램의 여러 단계를 다루기 위해 한 개 이상의 액티비티를 정의한다.

 

2) 인텐트

 

인텐트란 구체적인 행동을 설명하는 메커니즘이다. 안드로이드에서 거의 모든 것이 인텐트를 거치므로 구성요소를 대체하거나 재사용할 수 있게 해 준다.

 

3) 서비스

 

서비스란 유닉스 데몬처럼 사용자와의 직접적인 상호작용 없이 배경에서 실해되는 작업이다. 안드로이드에는 많은 내장 서비스와 그 서비스에 쉽게 액세스하게 해 주는 간편한 API가 제공된다.

 

4) 콘텐츠 제공자

 

콘텐츠 제공자란 데이터의 읽기와 쓰기를 위해 데이터가 사용자 API로 포장된 것이다.

 

$4. 리소스 사용하기

 

리소스란 프로그램에 필요한 지역화된 텍스트와 비트맵 등 코드 외의 작은 정보다. 안드로이드 리소스 컴파일러는 파일이 어느 하위 디렉토리에 있는지와 파일의 형식에 따라 처리한다. 예를 들어 PNG와 JPG형식의 비트맵은 res/drawable 디렉토리에 놓여야 하며 화면 레이어를 설명하는 XML 파일은 res/layout 디렉토리에 놓여야 한다.

 

$5. 안전과 보안

 

하드웨어는 한 프로세스가 다른 프로세스의 메로리에 액세스하는 것을 막고, 각 애플리케이션은 사용자 ID를 할당받아 애플리케이션이 만든 파일을 다른 애플리케이션이 읽거나 쓸 수 없다.

 

애플리케이션이 설치되면 패키지 매니저가 인증에 따라 권한을 허거하거나 제한하는데, 필요 시에는 사용자가 확인할 수 있다.

 

안드로이드는 AndroidManifest.xml 파일을 설정하여 시스템 전 영역의 액세스를 제한 할 수 있다.

 

 

 

 

 

 

 

댓글 없음:

댓글 쓰기