KOTLIN

[Kotlin] 공부 2일차 (2021-01-08)

HJ39 2022. 1. 9. 01:19

안드로이드 특징

안드로이드 운영체제 구조

안드로이드 앱 개발 특징

    ▶ 안드로이드 앱 구성

    ▶ 컴포넌트

    ▶ 컴포넌트 종류

    ▶ 컴포넌트의 독립성

    ▶ 앱 실행 시점의 다양성

    ▶ 애플리케이션 라이브러리 사용 가능

    ▶ 리소스를 활용한 개발

 

 

  • 안드로이드 특징

→ 리눅스 기반으로 한다.

→ 자바, 코틀린 언어를 이용하여 개발한다.

→ 운영체제의 주요 부분과 라이브러리, 구글에서 만든 앱의 코드가 대부분 공개되어있다.

→ 플레이스토어뿐만 아니라 다양한 방법으로 사용자에게 배포할 수 있다.

→ 모바일에 기본으로 탑재된 앱과 개발자가 만든 앱이 똑같은 환경에서 똑같은 API를 이용한다.

 

 

  • 안드로이드 운영체제 구조

안드로이드 소프트웨어 스택

위 사진에서 간략하게 요약하면

  • 리눅스 커널(Linux Kernel) : 안드로이드 리눅스에 기반을 둔 오픈소스 소프트웨어 스택이다.
  • 하드웨어 추상화 레이어 (Hardware Abstraction Layer, HAL) : 하드웨어의 추상화 계층으로 상위의 자바 API프레임워크에서 하드웨어 기능을 이용할 수 있게 표준 인터페이스를 제공한다.
  • 안드로이드 런타임(Android runtime, ART) : 앱을 실행하는 역할, 안드로이드 5.0 버전 이전에는 Dalvik이 안드로이드 앱을 실행했지만 5.0 버전부터는 ART로 바뀌게 되었다. DEX파일을 해석해서 실행한다.
  • 네이티브 C/C++라이브러리(Native C/C++ libraries) : 안드로이드 앱은 주로 자바 프레임 워크로 개발을 하지만 네이티브 C/C++ 라이브러리를 이용될 수 있는데 이를 안드로이드 NDK라고 한다.
  • 자바 API 프레임워크 : 앱을 개발할 때 사용하는 자바 API이다. 

안드로이드 런타임과 자바 런타임의 차이점

더보기

자바는 컴파일할 경우 클래스 파일이 만들어지게 되고 이 클래스 파일을 자바 가상 머신(JVM)에서 실행하게 된다.

안드로이드는 자바 클래스를 런타임 때 그대로 실행하지 않고 DEX파일로 컴파일한다. 그 후 DEX파일을 해석하는 ART에서 실행하게 된다. (DEX파일은 안드로이드 스튜디오에서 앱을 빌드할 때 자동으로 생성된다)

 

 

  • 안드로이드 앱 개발 특징
  • 안드로이드 앱 구성

→ 컴포넌트 클래스 : 클래스의 객체 생성부터 소멸까지 생명주기를 안드로이드 시스템에서 관리

 

→ 일반 클래스 : 클래스의 객체 생성부터 소멸까지 생명주기를 개발자 코드에서 관리

 

  • 컴포넌트

→ 애플리케이션의 구성요소

→ JAR파일이나 DLL파일로 개발한다.

→ 안드로이드에서는 클래스로 컴포넌트를 개발한다.

 

  • 컴포넌트 종류

→ 액티비티

화면을 구성하는 컴포넌트, 안드로이드 폰 화면에 출력 시 필요한 컴포넌트이다.

Activity클래스를 상속받아 생성한다.

 

→ 서비스

백그라운드 작업을 하는 컴포넌트

백그라운드에서 장시간 실행해야 할 업무를 담당한다.

Service클래스를 상속받아 생성한다.

 

→ 콘텐츠 프로바이더

앱의 데이터를 공유하는 컴포넌트

ContentProvider클래스를 상속받아 생성한다.

하나의 앱이 자신의 데이터를 다른 앱에 공유하려면 콘텐츠 프로바이더를 만들어야 되고 다른 앱에서는 해당 콘텐츠 프로바이더를 이용하여 데이터에 접근한다.

ex) 카카오톡 프로필 사진을 바꿀 때 갤러리 앱의 사진을 이용하는 것

 

→ 브로드캐스트 리시버

시스템 이벤트를 발생할 때 실행되게 하는 컴포넌트

BroadcastReceiver클래스를 상속받아 생성한다.

시스템 이벤트는 시스템에서 발생하는 특정 상황을 말한다. ex) 부팅 완료, 배터리 방전 등등

 

  • 컴포넌트의 독립성

각 컴포넌트들은 서로 종속되지 않게 독립적으로 실행되어야 한다.

ex) 네이버 웹툰(모바일 버전)

 

네이버웹툰 싸움독학

웹툰들을 고를 수 있는 클래스를 ListActivity클래스라고 하고 하나의 웹툰을 눌렀을 때를 FightActivity클래스라고 하자

다른 언어들 코딩하는 것처럼 ListActivity클래스에서 FightActivity 객체를 생성하여 실행되는 것이지만 안드로이드에서는 컴포넌트의 생명주기를 안드로이드 시스템에서 관리하므로 코드에서 직접 객체를 생성해 실행할 수 없다. 따라서 ListActivity에서 안드로이드 시스템에 FightActivity 실행을 의뢰해야 한다.

 

  • 앱 실행 시점의 다양성

우리가 스마트폰을 사용하다가 <싸움 독학>이 새로운 화가 업데이트되었다고 알림이 왔을 때 알림을 클릭하면 ListActivity을 실행하지 않고 FightActivity가 바로 실행된다. 이처럼 앱의 실행 시점이 다양하다.

이러한 특징 때문에 메인 함수 개념이 없다고 말하기도 한다.

 

  • 애플리케이션 라이브러리 사용 가능

카카오톡 채팅을 하다가 사진을 보내려고 할 때 채팅 창 내부에서 앨범 앱을 실행한 후 사진을 보내게 된다. 이러한 것이 카카오톡 앱에서 앨범 앱을 라이브러리로 사용한 경우이다.

 

  • 리소스를 활용한 개발

안드로이드 앱 개발에서는 리소스를 많이 활용한다는 점이다.

리소스란 코드에서 정적인 값을 분리하는 것을 말한다.

예를 들면 코드를 짜는 데 계속해서 abcd라는 문구를 사용한다고 하면 abcd라는 문자열을 mytext.txt로 리소스화 시켜 코드를 짤 때 mytext.txt를 가져다 사용하는 것을 말한다.

이렇게 리소스 하여 사용하는 경우 코드가 짧아지고 개발 생산성과 유지, 보수성이 좋아진다.

안드로이드 앱 개발을 할 때는 대부분의 리소스는 XML 파일로 작성한다

 

 

내가 알던 프로그래밍하고 차이가 좀 있어서 되게 신기하고 재미가 있다.

 

 

 

'KOTLIN' 카테고리의 다른 글

[Kotlin] 공부 6일차 (2022-01-18)  (0) 2022.01.18
[Kotlin] 공부 5일차 (2022-01-17)  (0) 2022.01.18
[Kotlin] 공부 4일차 (2022-01-15)  (0) 2022.01.16
[Kotlin] 공부 3일차 (2022-01-14)  (0) 2022.01.15
[Kotlin] 첫 공부 시작 (2022-01-07)  (0) 2022.01.08