본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 3. · 25 Views
Android 핵심 개념 완벽 정리
Android 앱 개발의 필수 핵심 개념을 초급자 관점에서 정리했습니다. Activity, Intent, Lifecycle 등 실무에서 바로 활용할 수 있는 기본 개념들을 코드 예제와 함께 학습할 수 있습니다.
들어가며
이 글에서는 Android 핵심 개념 완벽 정리에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- Activity_기본_구조
- Intent_화면_전환
- Activity_Lifecycle
- ViewModel_데이터_관리
- RecyclerView_리스트_구현
- SharedPreferences_데이터_저장
- Coroutine_비동기_처리
- Fragment_화면_구성
- Notification_알림_생성
- 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
댓글 (0)
함께 보면 좋은 카드 뉴스
Riverpod 3.0 쇼핑 앱 종합 프로젝트 완벽 가이드
Flutter와 Riverpod 3.0을 활용한 실무 수준의 쇼핑 앱 개발 과정을 단계별로 학습합니다. 상품 목록, 장바구니, 주문, 인증, 검색 기능까지 모든 핵심 기능을 구현하며 상태 관리의 실전 노하우를 익힙니다.
Riverpod 3.0 requireValue로 Provider 결합하기
Riverpod 3.0에 새로 추가된 requireValue를 활용하여 여러 Provider의 데이터를 효율적으로 결합하는 방법을 배웁니다. 비동기 데이터를 마치 동기 데이터처럼 다루는 실전 패턴을 소개합니다.
Flutter 3.0 Offline 데이터 영속화 완벽 가이드
Flutter 3.0에서 새롭게 추가된 Offline 데이터 영속화 기능을 배웁니다. Storage 인터페이스부터 SharedPreferences 활용, 실전 예제까지 실무에서 바로 사용할 수 있는 패턴을 배워봅시다.
Riverpod 3.0 Mutation으로 폼 제출 완벽 가이드
Riverpod 3.0의 새로운 Mutation 기능으로 로그인과 회원가입 폼을 우아하게 처리하는 방법을 배웁니다. 로딩 상태, 에러 처리, 성공 처리까지 실무에서 바로 쓸 수 있는 패턴을 익혀보세요.
Riverpod Provider 오버라이드 테스트 완벽 가이드
Riverpod의 overrideWithValue와 overrideWith를 활용한 테스트 작성 방법을 실무 예제로 배워봅니다. Repository 모킹부터 위젯 테스트, 통합 테스트까지 단계별로 익힐 수 있습니다.