Android에서 dp와 px 변환하기 (확장 함수로 간단하게 + 사용 시점 정리)


✨ 개요

Android UI 개발에서 가장 많이 다루는 단위는 dppx입니다.
두 단위는 서로 다른 목적을 가지며, 올바른 상황에 맞게 사용하는 것이 중요합니다.


1. ✅ dp와 px의 차이점

단위 의미 설명 사용 예
dp Density-independent Pixel 디바이스 해상도에 독립적인 단위 레이아웃, 마진, 패딩 등
px Pixel 실제 디바이스의 픽셀 수 애니메이션, 드로잉, OpenGL 등

2. ✅ dp 와 px 는 언제 사용하나요?

2.1 dp 는 언제 사용하나요?

2.2. 🔥 px는 언제 사용하나요?

2.3. 🔥 정리:

레이아웃 설계는 dp, 계산/렌더링은 px를 주로 사용합니다.


3. 🚫 기본 변환 공식

// dp to px
val px = dp * (densityDpi / 160f)

// px to dp
val dp = px / (densityDpi / 160f)

4. 🚫 Kotlin 확장 함수로 변환하기

4.1 Context 기반 확장 함수

fun Context.dpToPx(dp: Float): Float {
    return dp * resources.displayMetrics.density
}

fun Context.pxToDp(px: Float): Float {
    return px / resources.displayMetrics.density
}

4.2 Int 확장 버전

val Int.dp: Int
get() = (this * Resources.getSystem().displayMetrics.density).toInt()

val Int.px: Int
get() = (this / Resources.getSystem().displayMetrics.density).toInt()

val padding = 16.dp
val textSizeInDp = 32.px

5. dp vs px

항목 dp (density-independent pixel) px (pixel)
단위 기준 기준 밀도(160dpi)를 기준으로 계산 실제 디바이스의 물리적 픽셀
해상도 독립성 ✅ 해상도에 관계없이 일정한 크기 유지 ❌ 기기 해상도에 따라 크기 달라짐
주 사용 용도 레이아웃 크기, 패딩, 마진, 높이 등 UI 설계 드로잉, 커스텀 뷰, 이미지 처리 등
주요 API 대상 setPadding(), layoutParams Canvas, Bitmap, Paint
코드 변환 필요 여부 필요 (dp → px 변환 필요) 일반적으로 바로 사용
가독성/유지보수 ✅ 설계 가독성 및 재사용성 높음 ❌ 해상도별 보정 필요, 유지보수 어려움

6. 결론

Android UI에서는 dp를 기본 단위로 사용하고, 특정 상황에서는 px 단위 변환이 필요합니다.



Related Posts