코딩 공부
[안드로이드 개발 일지] 안드로이드 앱 개발 특징, 아키텍쳐 본문
안드로이드의 주요 특징
- 안드로이드는 리눅스 기반이다.
: 안드로이드는 리눅스 커널을 기반으로 하고 있다. 리눅스 커널은 운영체제의 핵심 부분으로, 하드웨어와 소프트웨어 간의 통신을 담당하고, 안드로이드는 리눅스 커널을 활용해 기기의 하드웨어 자원을 관리하고 안정적인 운영을 지원한다. 리눅스는 오픈 소스 운영 체제로, 소스 코드에 대한 자유로운 액세스와 수정이 가능하여 개발자들은 안드로이드 소스 코드에 접근이 가능하고 이를 커스터마이징할 수 있다. 리눅스는 다양한 하드웨어 아키텍처를 지원하는데, 리눅스 커널 기반인 안드로이드 역시 다양한 디바이스 및 하드웨어에서 작동할 수 있다. 따라서 안드로이드는 다양한 제조사와 디바이스에서 사용할 수 있게 된다. 또한, 리눅스는 다중 사용자, 다중 작업, 네트워크 기능 등을 지원하는 안정적이고 강력한 운영체제로, 안드로이드는 이러한 특성을 기반으로 모바일 디바이스에서의 안정성과 성능을 보장한다. 리눅스는 강력한 보안 기능을 제공하는데, 안드로이드는 리눅스의 보안 기능을 활용해 앱 및 사용자 데이터를 안전하게 관리할 수 있다.
- 안드로이드 개발은 개발자 친화적이다.
: 안드로이드는 Java, Kotlin을 이용해 개발을 하며, 안드로이드 스튜디오와 같은 개발 도구를 통해 개발자들이 편리하게 앱을 개발할 수 있도록 지원한다.
- 앱 생태계가 넓다.
: Google Play Store를 통해 수백만 개의 앱을 다운로드하고 설치할 수 있다. 안드로이드는 거대한 앱 생태계를 가지고 있어 사용자들이 다양한 앱을 통해 기능을 확장하고 맞춤형 경험을 얻을 수 있다. (Google Play Store뿐만 아니라 다양한 방법으로 사용자에게 배포할 수 있다.)
- 안드로이드 플랫폼 기반의 스마트폰을 여러 제조업체에서 만들 수 있다.
: 같은 플랫폼을 기반으로 다양한 안드로이드 스마트폰이 출시되어 소비자 입장에서는 선택의 폭이 넓다는 장점이 있지만, 이는 기기의 파편화를 유발해 개발자 입장에서는 단점이 된다.
자세한 단점은 다음과 같다.
1. 버전 및 업데이트 관리 :
안드로이드는 다양한 버전과 제조사별 커스터마이징된 플랫폼을 사용하고 있다. 이로 인해 개발자는 여러 버전과 기기에서 애플리케이션이 어떻게 동작하는지 테스트하고 최적화해야한다. 또한, 오래된 버전의 안드로이드를 사용하는 기기들과의 호환성 유지도 관리가 필요하다.
2. 해상도 및 화면 크기의 다양성 :
제조사들은 각자의 화면 크기와 해상도를 가진 디바이스를 출시하고 있어 이에 맞춘 앱을 최적화하는 것이 필요하다.
3. 하드웨어 기능의 차이 :
각 제조사는 고유 하드웨어 기능을 추가 및 수정이 가능해 특정 기능이나 센서의 일관된 지원이 어려울 수 있다.
따라서 개발자는 이러한 다양한 하드웨어 환경에서도 일관된 사용자 경험이 가능하도록 개발해야한다.
4. 플랫폼 업데이트 지연 :
일부 제조사들은 안드로이드 업데이트를 제공하는 데 지연이 발생할 수 있다. 이에 따라 사용자는 최신 기능 및 보안 패치를 늦게 받게 되고, 개발자는 최신 플랫폼을 지원하기 위해 기다려야 하는 경우도 발생할 수 있다.
5. 테스트 및 유지 보수의 어려움 :
다양한 하드웨어 및 소프트웨어 환경에서의 테스트는 번거롭고 시간이 많이 소요된다. 따라서 애플리케이션의 품질을 유지하고 버그를 최소화하기 위해 더 많은 테스트와 유지 보수가 필요하다.
안드로이드 플랫폼 아키텍쳐

- HAL(Hardware Abstraction Layer) :
하드웨어와 소프트웨어 간의 추상화를 담당하는 계층으로, 특정하드웨어와 상호 작용하는 데 사용된다. 즉, 여러 제조사가 다양한 하드웨어를 사용하는 안드로이드 기기에서 일관된 소프트웨어 인터페이스를 제공하기 위해 HAL이 사용된다. 이는 안드로이드 플랫폼이 다양한 하드웨어 구성을 가진 디바이스에 대해 쉽게 적응하고 지원할 수 있도록 돕는 역할을 한다. HAL의 주요 기능은 다음과 같다.
1. 하드웨어 추상화 :
HAL은 특정 하드웨어의 세부사항을 추상화하여 안드로이드 상위 레벨의 소프트웨어와의 인터페이스를 제공한다.
이는 안드로이드 시스템이 특정 하드웨어 세부 정보를 몰라도 되게 하며, 특정 하드웨어에 대한 종속성을 최소화한다.
2. 표준 인터페이스 제공 :
HAL은 안드로이드 시스템의 다른 부분들이 하드웨어와 상호 작용하는데 필요한 표준 인터페이스를 제공한다.
이는 안드로이드 시스템이 하드웨어 기능을 사용하기 위해 특정한 드라이버와 통신할 때 사용된다.
3. 다양한 하드웨어 지원 :
안드로이드는 다양한 하드웨어 플랫폼에서 실행되기 때문에, 각각의 하드웨어에 대한 HAL이 필요하다.
각 하드웨어 제조사는 자신의 하드웨어에 대한 HAL을 제공하여 안드로이드 플랫폼에 통합될 수 있게 한다.
4. 업그레이드 용이성 :
안드로이드의 업그레이드나 새로운 하드웨어 도입 시에도, HAL을 통해 새로운 하드웨어를 지원하는 인터페이스를 제공함으로써 안드로이드 시스템은 비교적 쉽게 새로운 기능이나 장치를 채택할 수 있다.
즉, HAL은 안드로이드 시스템의 다양성을 처리하고 하드웨어와 소프트웨어 간의 추상화를 담당하여 안드로이드의 유연성과 확장성을 지원한다.
예를 들면, 자바 API 프레임워크에서 하드웨어 기기(카메라, 센서 등)를 이용하기 위한 코드가 실행되면 내부적으로 HAL의 라이브러리 모듈이 로딩되어 처리하는 것이다.
- Android Runtime(ART, 안드로이드 런타임) :
자바로 개발된 다른 애플리케이션은 런타임 때 JVM(Java Virtual Machine)이 동작을 수행하지만, 안드로이드의 VM은 ART(Android Runtime)를 이용한다.(ART는 API Level 21(Android 5.0)에서 새로 추가된 VM이며, 이전 버전의 VM은 Dalvik였다.)
ART는 앱을 실행할 때 DEX 파일을 실행한다. 보통 자바를 이용해 개발하면 실행 시 JVM이 class 파일을 해석하게 되는데, 안드로이드의 경우는 개발할 때 이용하는 언어로서만 자바를 이용한다고 보면 된다.
자바로 개발된 개발자 코드는 컴파일러가 자동으로 DEX 파일로 변경하고, 런타임 때 ART가 이 DEX 파일을 해석해 수행하는 구조이다.
- 자바 API 프레임워크 :
개발자가 안드로이드 앱을 만들 때 이용하는 표준 라이브러리이다. 자바 API 프레임워크에서는 많은 기능의 라이브러리 클래스 뿐만 아니라 UI를 구성할 수 있는 View 클래스, 리소스 관리, 데이터 영속화 등의 기능을 제공한다. 앱 개발자들은 하위의 커널이나 시스템 라이브러리를 직접 이용할 필요 없이, 자바 API 프레임워크에서 제공하는 클래스를 이용해 앱의 모든 기능을 구현할 수 있다.
* Java API는 자바 프로그래밍 언어를 사용해 소프트웨어를 개발하기 위한 여러 기능과 클래스들의 집합이다. API는 "Application Programming Interface"의 약자로, 개발자가 다른 소프트웨어 구성 요소와 상호작용하기 위해 사용할 수 있는 함수, 클래스, 메서드 등을 정의한 것이다. Java API는 자바 언어의 핵심 라이브러리를 포함하며, 다양한 애플리케이션 개발에 필요한 다양한 도구와 기능을 제공한다.
1. Core API : 자바의 핵심 API는 자바 언어의 기본 기능을 제공한다. 여기에는 자료구조, 입출력, 스레드 처리, 예외 처리 등을 다루는 클래스와 인터페이스가 포함된다.
2. Java Standard Edition(SE) : 자바 SE API는 자바의 표준 버전으로, 기본적인 자바 응용 프로그램 개발을 위한 API를 제공한다. (java.lang, java.util, java.io 등의 패키지가 이에 속한다.)
3. Java Enterprise Edition(EE) : 자바 EE API는 대규모 기업 환경에서의 애플리케이션 개발을 위한 API를 제공한다. 이에는 서블릿, JSP, EJB(Enterprise JavaBeans) 등의 기술이 포함되어 있다.
4. Java Micro Edition(ME) : 자바 ME API는 모바일 및 임베디드 시스템에서 동작하는 애플리케이션을 개발하기 위한 API를 제공한다.
5. JavaFX : JavaFX API는 풍부한 그래픽 사용자 인터페이스(GUI)를 개발하기 위한 도구를 제공한다.
6. Java Database Connectivity(JDBC) : JDBC API는 자바 프로그램에서 데이터베이스에 접속하고 SQL을 실행하기 위한 기능을 제공한다.
7. Java Networking API : 네트워크 프로그래밍을 위한 클래스와 인터페이스를 제공한다. 이를 사용해 프로그래밍, HTTP 통신 등을 구현할 수 있다.
자바 API는 매우 방대하며, 개발자들이 공통적으로 필요로 하는 많은 작업을 간편하게 처리할 수 있도록 도와준다.
또한 자바 API는 계속해서 발전하고 확장되며, 새로운 기능과 개선 사항이 추가되어 사용자 편의성을 높이고 개발 생산성을 향상시키는 역할을 한다.
'Android 공부' 카테고리의 다른 글
[안드로이드 개발 일지] 안드로이드 앱 배포(APK, AAB) (2) | 2024.01.31 |
---|---|
[안드로이드 개발 일지] AVD, SDK (0) | 2024.01.31 |