2_안드로이드 이해

topics 500-모바일개발 502 Android
types 이론 학습
tags
references developer.android.com/guide/topics/re...

Android 아키텍처

Android 시스템의 구조와 핵심 개념을 정리한다.

시스템 구조

|306

계층 설명
Linux Kernel 리눅스 기반 운영체제
HAL 하드웨어 추상화 레이어 - Java API에서 하드웨어 기능 접근 가능하게 함
ART Android Runtime - 앱 실행 담당
Java API Framework 앱 개발용 API
Applications 실제 앱들

컴파일 과정

|673

일반 Java vs Android Java 컴파일 비교:

단계 일반 Java Android
1 .java → .class .java/.kt → .class
2 JVM에서 실행 .class → DEX 파일
3 - ART에서 실행

왜 DEX 파일로 변환하냐면: Android는 JVM이 아닌 ART(Android Runtime)에서 실행된다. DEX(Dalvik Executable)는 ART가 해석할 수 있는 형식이다.

4대 컴포넌트

Android 앱의 핵심은 컴포넌트다. 컴포넌트는 앱의 구성 요소이자 구성 단위다.

컴포넌트 클래스 역할
Activity Activity 화면 구성
Service Service 백그라운드 작업
Content Provider ContentProvider 앱 간 데이터 공유
Broadcast Receiver BroadcastReceiver 시스템 이벤트 수신

특징: 컴포넌트 클래스와 인스턴스는 1:1 대응이다. 생명주기를 안드로이드 시스템에서 관리한다.

Activity

화면을 구성하는 컴포넌트다.

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

Service

백그라운드에서 실행되는 컴포넌트다. UI가 없다.

class MyService : Service() {
    override fun onBind(intent: Intent): IBinder? = null

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        // 백그라운드 작업
        return START_STICKY
    }
}

Content Provider

앱 간 데이터를 공유하는 컴포넌트다. 연락처, 갤러리 등에서 사용한다.

Broadcast Receiver

시스템 이벤트(배터리 부족, 네트워크 변경 등)를 수신하는 컴포넌트다.

class MyReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        // 이벤트 처리
    }
}

리소스 시스템

Android는 정적인 값을 리소스로 등록해서 사용한다.

리소스 접근

// 코드에서 접근
val text = resources.getString(R.string.mytxt)
val color = ContextCompat.getColor(this, R.color.primary)
val drawable = ContextCompat.getDrawable(this, R.drawable.icon)
<!-- XML에서 접근 -->
<TextView
    android:text="@string/mytxt"
    android:textColor="@color/primary"
    android:background="@drawable/icon" />

리소스 파일 명명 규칙

|254

  • 실제 파일: <resource_name>-<qualifier> 형식
  • Android Studio는 같은 resource_name끼리 그룹화해서 보여줌
  • 파일명은 snake_case (대문자 불가)
<!-- res/values/strings.xml -->
<resources>
    <string name="app_name">My App</string>
    <string name="mytxt">동해 물과 백두산이 마르고 닳도록</string>
</resources>

리소스 사용의 장점

장점 설명
유지보수성 코드와 데이터 분리
다국어 지원 언어별 리소스 파일 분리
일관성 중앙 집중식 관리
디자인 변경 용이 코드 수정 없이 UI 변경 가능
메모리 관리 시스템이 효율적으로 관리

왜 리소스를 쓰냐면: 다국어 지원할 때 values-ko, values-en 폴더만 만들면 자동으로 언어에 맞는 리소스를 로드한다. 코드 수정 없이도 가능하다.

관련 문서