ViewModel 완벽 마스터

ViewModel의 핵심 개념과 실전 활용법

Flutter중급
6시간
3개 항목
학습 진행률0 / 3 (0%)

학습 항목

1. Flutter
초급
Android|핵심|개념|완벽|정리
퀴즈튜토리얼
2. Flutter
Flutter|MVVM|패턴|완벽|가이드
퀴즈튜토리얼
3. Java
초급
Android|성능|최적화|가이드
퀴즈튜토리얼
1 / 3

이미지 로딩 중...

Android 핵심 개념 완벽 정리 - 슬라이드 1/11

Android 핵심 개념 완벽 정리

Android 앱 개발의 필수 핵심 개념을 초급자 관점에서 정리했습니다. Activity, Intent, Lifecycle 등 실무에서 바로 활용할 수 있는 기본 개념들을 코드 예제와 함께 학습할 수 있습니다.


카테고리:Flutter
언어:Kotlin
난이도:beginner
메인 태그:#Android
서브 태그:
#Activity#Intent#Lifecycle#ViewModel

들어가며

이 글에서는 Android 핵심 개념 완벽 정리에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.

목차

  1. Activity_기본_구조
  2. Intent_화면_전환
  3. Activity_Lifecycle
  4. ViewModel_데이터_관리
  5. RecyclerView_리스트_구현
  6. SharedPreferences_데이터_저장
  7. Coroutine_비동기_처리
  8. Fragment_화면_구성
  9. Notification_알림_생성
  10. Room_Database_사용

1. Activity_기본_구조

개요

Activity는 Android 앱의 화면을 나타내는 기본 컴포넌트입니다. 사용자와 상호작용하는 UI를 담당합니다.

코드 예제

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

        // UI 초기화 코드
        val button = findViewById<Button>(R.id.myButton)
        button.setOnClickListener {
            Toast.makeText(this, "버튼 클릭!", Toast.LENGTH_SHORT).show()
        }
    }
}

설명

onCreate()에서 레이아웃을 설정하고 UI 컴포넌트를 초기화합니다. AppCompatActivity를 상속받아 Activity를 구현합니다.


2. Intent_화면_전환

개요

Intent는 Activity 간 화면 전환이나 데이터 전달을 위한 메시징 객체입니다. 명시적/암시적 Intent로 구분됩니다.

코드 예제

// 화면 전환
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("userName", "홍길동")
intent.putExtra("age", 25)
startActivity(intent)

// SecondActivity에서 데이터 받기
val userName = intent.getStringExtra("userName")
val age = intent.getIntExtra("age", 0)

설명

Intent에 데이터를 담아 다른 Activity로 전달하고, 받는 쪽에서는 getStringExtra() 등으로 데이터를 추출합니다.


3. Activity_Lifecycle

개요

Activity는 생성부터 종료까지 여러 상태를 거치며, 각 상태마다 콜백 메서드가 호출됩니다.

코드 예제

class MainActivity : AppCompatActivity() {
    override fun onStart() {
        super.onStart()
        Log.d("Lifecycle", "Activity가 화면에 표시됨")
    }

    override fun onPause() {
        super.onPause()
        Log.d("Lifecycle", "Activity가 일시정지됨")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d("Lifecycle", "Activity가 종료됨")
    }
}

설명

onCreate → onStart → onResume → onPause → onStop → onDestroy 순으로 생명주기가 진행되며, 각 단계에서 필요한 작업을 수행합니다.


4. ViewModel_데이터_관리

개요

ViewModel은 UI 관련 데이터를 생명주기에 안전하게 저장하고 관리하는 클래스입니다.

코드 예제

class MainViewModel : ViewModel() {
    private val _count = MutableLiveData<Int>(0)
    val count: LiveData<Int> = _count

    fun incrementCount() {
        _count.value = (_count.value ?: 0) + 1
    }
}

// Activity에서 사용
val viewModel: MainViewModel by viewModels()
viewModel.count.observe(this) { count ->
    textView.text = "Count: $count"
}

설명

ViewModel은 화면 회전 등의 상황에서도 데이터를 유지하며, LiveData를 통해 UI에 자동으로 데이터 변경을 반영합니다.


5. RecyclerView_리스트_구현

개요

RecyclerView는 효율적으로 대량의 데이터를 리스트 형태로 표시하는 컴포넌트입니다.

코드 예제

class MyAdapter(private val items: List<String>) :
    RecyclerView.Adapter<MyAdapter.ViewHolder>() {

    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val textView: TextView = view.findViewById(R.id.textView)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_layout, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.textView.text = items[position]
    }

    override fun getItemCount() = items.size
}

설명

Adapter 패턴을 사용해 데이터를 ViewHolder에 바인딩하며, 화면에 보이는 항목만 생성하여 메모리를 효율적으로 사용합니다.


6. SharedPreferences_데이터_저장

개요

SharedPreferences는 키-값 쌍으로 간단한 데이터를 로컬에 영구 저장하는 방법입니다.

코드 예제

// 데이터 저장
val sharedPref = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE)
with(sharedPref.edit()) {
    putString("userName", "홍길동")
    putInt("userAge", 25)
    putBoolean("isLoggedIn", true)
    apply()
}

// 데이터 읽기
val userName = sharedPref.getString("userName", "")
val userAge = sharedPref.getInt("userAge", 0)
val isLoggedIn = sharedPref.getBoolean("isLoggedIn", false)

설명

설정 값, 사용자 정보 등 작은 데이터를 저장할 때 사용하며, edit()로 수정하고 apply()로 변경사항을 저장합니다.


7. Coroutine_비동기_처리

개요

Coroutine은 비동기 작업을 간결하게 처리할 수 있는 Kotlin의 경량 스레드입니다.

코드 예제

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        lifecycleScope.launch {
            val result = withContext(Dispatchers.IO) {
                // 네트워크 요청이나 DB 작업
                delay(2000)
                "데이터 로드 완료"
            }
            // UI 업데이트 (Main 스레드)
            textView.text = result
        }
    }
}

설명

lifecycleScope로 생명주기에 맞춰 코루틴을 실행하고, Dispatchers.IO로 백그라운드 작업을 수행한 뒤 자동으로 메인 스레드로 돌아옵니다.


8. Fragment_화면_구성

개요

Fragment는 Activity 내에서 재사용 가능한 UI 모듈로, 하나의 Activity에 여러 Fragment를 조합할 수 있습니다.

코드 예제

class MyFragment : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_my, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        view.findViewById<Button>(R.id.button).setOnClickListener {
            // 버튼 클릭 처리
        }
    }
}

설명

onCreateView에서 레이아웃을 생성하고, onViewCreated에서 뷰를 초기화합니다. Activity처럼 독립적인 생명주기를 가집니다.


9. Notification_알림_생성

개요

Notification은 사용자에게 앱 외부에서 정보를 전달하는 알림 메시지입니다.

코드 예제

val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE)
    as NotificationManager

val notification = NotificationCompat.Builder(this, "channel_id")
    .setSmallIcon(R.drawable.ic_notification)
    .setContentTitle("새로운 메시지")
    .setContentText("안녕하세요! 메시지가 도착했습니다.")
    .setPriority(NotificationCompat.PRIORITY_HIGH)
    .build()

notificationManager.notify(1, notification)

설명

NotificationCompat.Builder로 알림을 구성하고, NotificationManager로 알림을 표시합니다. 채널 ID는 Android 8.0 이상에서 필수입니다.


10. Room_Database_사용

개요

Room은 SQLite를 쉽게 사용할 수 있도록 추상화한 Android의 공식 데이터베이스 라이브러리입니다.

코드 예제

@Entity(tableName = "users")
data class User(
    @PrimaryKey(autoGenerate = true) val id: Int = 0,
    @ColumnInfo(name = "user_name") val userName: String,
    val age: Int
)

@Dao
interface UserDao {
    @Insert
    suspend fun insert(user: User)

    @Query("SELECT * FROM users")
    suspend fun getAllUsers(): List<User>
}

@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

설명

Entity로 테이블을 정의하고, DAO에서 데이터 접근 메서드를 선언하며, Database 클래스로 전체 DB를 관리합니다. Coroutine과 함께 사용하면 효율적입니다.


마치며

이번 글에서는 Android 핵심 개념 완벽 정리에 대해 알아보았습니다. 총 10가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.

관련 태그

#Android #Activity #Intent #Lifecycle #ViewModel

#Android#Activity#Intent#Lifecycle#ViewModel#Flutter