Android에서 Screen Density(Density Buckets)의 핵심을 설명합니다 — 픽셀 밀도에 따른 화면 분류: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. Screen Density는 화면 1인치에 몇 개의 물리적 픽셀이 들어가는지 결정하며, 다양한 기기에서 이미지와 인터페이스가 표시되는 방식에 직접적인 영향을 미칩니다. Google Android Compatibility Definition(2025)에 따르면, Android는 6개의 주요 Density Buckets와 폴더블 기기를 위한 최대 8개의 추가 Buckets를 지원합니다.
핵심 요점
Screen Density는 화면 1인치당 물리적 픽셀 수입니다(ppi — 인치당 픽셀, 또는 dpi — 인치당 도트). Android는 Density Buckets 개념을 사용합니다 — 유사한 밀도를 가진 화면을 그룹화하여 동일한 스케일링 계수를 적용합니다. 해상도(너비와 높이의 픽셀 수)와 달리, 밀도는 화면에서 픽셀의 물리적 크기를 결정합니다. Google Pixel Team(2025)에 따르면, 최신 플래그십의 밀도는 450-550 ppi이며, 이는 xxhdpi-xxxhdpi 버킷에 해당합니다.
Density Buckets 시스템은 Android 1.6 Donut(2009)에서 160 dpi(mdpi)의 첫 번째 기기와 함께 등장했습니다. 화면 해상도가 증가함에 따라 새로운 버킷이 추가되었습니다: hdpi(Android 1.6), xhdpi(Android 2.3), xxhdpi(Android 4.1), xxxhdpi(Android 4.4). 각각의 새 버킷은 이전 버킷보다 1.5배 또는 2배의 밀도 증가를 반영합니다. Android Open Source Project(2025)에 따르면, 현재 활성 Android 기기의 96%가 hdpi에서 xxxhdpi 범위의 밀도를 가지고 있습니다.
Density Buckets은 Google이 Android 화면을 그룹화하기 위해 정의한 밀도 범위입니다. 기본 버킷은 mdpi(160 dpi)입니다. 스케일 계수는 특정 버킷의 리소스가 mdpi보다 몇 배 더 큰지를 나타냅니다. 예를 들어, xhdpi(2×)는 이미지의 너비와 높이가 mdpi 버전보다 2배 커야 함을 의미합니다. Android Studio Resource Manager(2025)에 따르면, xxhdpi는 활성 기기 중 가장 일반적인 버킷입니다(시장 점유율 38%), 그 다음이 xhdpi(28%)입니다.
| 버킷 | DPI 범위 | 스케일 | 기기 예시 | 시장 점유율(2025) |
|---|---|---|---|---|
| ldpi | 120 dpi | 0.75× | 오래된 저가 기기 | 1% 미만 |
| mdpi | 120-160 dpi | 1× | HTC Dream(G1), 7인치 태블릿 | 3% |
| hdpi | 160-240 dpi | 1.5× | Samsung Galaxy S2, Nexus 4 | 12% |
| xhdpi | 240-320 dpi | 2× | Google Nexus 5, Moto G | 28% |
| xxhdpi | 320-480 dpi | 3× | Samsung Galaxy S8, Pixel 3 | 38% |
| xxxhdpi | 480-640 dpi | 4× | Samsung Galaxy S24 Ultra, Pixel 9 Pro | 18% |
화면 해상도는 너비와 높이의 총 픽셀 수입니다(예: 1080×2400). 화면 밀도는 인치당 픽셀 수입니다. 동일한 해상도의 두 기기라도 물리적 화면 크기가 다르면 밀도가 다를 수 있습니다. 예를 들어, 1080×2400 해상도의 6인치 폰은 약 440 dpi(xxhdpi)의 밀도를 가지지만, 동일한 해상도의 5인치 폰은 약 530 dpi(xxxhdpi)입니다. 이것이 핵심 차이점입니다: 인터페이스는 해상도가 아닌 밀도에 적응해야 하며, 그렇지 않으면 고밀도 기기에서 요소가 너무 작아집니다.
Android는 특정 화면 밀도의 리소스를 로드하기 위해 res 폴더 이름에 한정자를 사용합니다: drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi. 애플리케이션이 시작되면 Android는 기기 밀도에 가장 잘 맞는 폴더에서 리소스를 선택합니다. 정확히 일치하는 것이 없으면 시스템은 가장 가까운 버킷을 사용하거나 더 낮은 밀도의 리소스를 스케일링합니다. Android Docs(2025)에 따르면, 벡터(VectorDrawable)에는 밀도 한정자가 필요하지 않습니다 — 자동으로 스케일링됩니다.
/res/
drawable-mdpi/
icon_app.png (48x48 px)
drawable-hdpi/
icon_app.png (72x72 px)
drawable-xhdpi/
icon_app.png (96x96 px)
drawable-xxhdpi/
icon_app.png (144x144 px)
drawable-xxxhdpi/
icon_app.png (192x192 px)
이 구조에서 각 폴더는 동일한 아이콘을 포함하지만 물리적 픽셀 크기가 다릅니다. mdpi의 기본 크기 48×48픽셀은 각 버킷의 스케일 계수로 곱해집니다. Android는 기기의 DisplayMetrics.density에 따라 자동으로 올바른 파일을 선택합니다. VectorDrawable(XML 형식)의 경우 drawable/에 단일 파일이면 충분합니다 — 시스템이 품질 손실 없이 스케일링합니다.
크기 계산은 각 밀도의 이미지에 대해 간단한 공식을 기반으로 합니다: mdpi 크기 × 스케일 계수. mdpi의 아이콘이 48×48 px인 경우, hdpi의 경우 72×72 px(48 × 1.5), xhdpi의 경우 96×96 px(48 × 2), xxhdpi의 경우 144×144 px(48 × 3), xxxhdpi의 경우 192×192 px(48 × 4)입니다. Material Design Guidelines(2025)에 따르면, 이 공식은 모든 래스터 리소스(아이콘, 배경, 이미지, 9-patch)에 적용됩니다.
| 버킷 | 스케일 | mdpi 크기(px) | 버킷 크기(px) |
|---|---|---|---|
| mdpi | 1× | 48×48 | 48×48 |
| hdpi | 1.5× | 48×48 | 72×72 |
| xhdpi | 2× | 48×48 | 96×96 |
| xxhdpi | 3× | 48×48 | 144×144 |
| xxxhdpi | 4× | 48×48 | 192×192 |
올바른 준비 Density Buckets를 위한 리소스는 다섯 가지 핵심 규칙을 포함합니다. 첫째, 간단한 아이콘에는 VectorDrawable을 사용하세요 — 5개의 복사본이 필요 없습니다. 둘째, 래스터 이미지의 경우 디자인 도구에서 모든 밀도를 내보내세요(Android Studio Asset Studio가 자동 생성합니다). 셋째, 한정자 없이 drawable/에 이미지를 배치하지 마세요 — 시스템이 품질 손실과 함께 스케일링합니다. 넷째, 기본 기기와 다른 밀도의 기기에서 테스트하세요 — 에뮬레이터에서 밀도를 변경할 수 있습니다. 다섯째, PNG 대신 WebP를 사용하세요 — Google(2025)에 따르면 WebP는 동일한 품질에서 25-35% 더 작은 크기를 제공합니다.
자주 묻는 질문
mdpi(medium-density pixel-independent) — Android에서 160 dpi 밀도의 기본 Density Bucket입니다. 다른 모든 버킷은 mdpi를 기준으로 계산됩니다: hdpi — 1.5×, xhdpi — 2× 등. mdpi는 밀도 독립 픽셀(dp)당 하나의 물리적 픽셀에 해당합니다. 디자이너는 레이아웃을 만들 때 mdpi를 기준으로 사용합니다.
DisplayMetrics를 사용하세요: getResources().getDisplayMetrics().density는 스케일 계수를 반환합니다(mdpi의 경우 1.0, xxhdpi의 경우 3.0). 프로그래밍 방식으로 버킷을 확인하려면 getResources().getConfiguration().densityDpi를 호출하세요. Android Studio에는 연결된 기기의 densityDpi를 보여주는 Device Explorer도 있습니다.
기술적으로는 — 가능하지만 품질 손실이 있습니다. 리소스가 drawable-xxhdpi에만 있는 경우, mdpi 기기에서 3배 축소되어 이미지가 흐려집니다. 리소스가 mdpi에만 있는 경우, xxhdpi에서 확대되어 픽셀화됩니다. 권장사항은 최소한 xhdpi, xxhdpi 및 xxxhdpi용으로 준비하는 것입니다 — 이는 활성 기기의 84%(2025년)를 커버합니다. VectorDrawable의 경우 한정자 없는 단일 파일로 충분합니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.