본문 바로가기
개발/안드로이드

[안드로이드] 구글은 왜 DP(Density-independent Pixel) 만들었을가

by 핸디(Handy) 2020. 5. 21.

dp를 왜 쓸까에 대한 고민이 문득 든 것인 단톡방에서

"dp 대신에 cm를 쓰면 더 직관적이지 않느냐?"

라는 물음에서 시작되었습니다.

생각을 해보니 맞는 말이기도 하여 이 기회에 제 생각을 이렇게 글로 작성합니다.

DP는 Device-independent Pixel 또는 Density-independent Pixel 의 약자입니다. 말 그대로 장치에 독립적인 픽셀. 즉 모바일 기기에 맞는 새로운 기준인 것이지요.

DP는 장치에 독립적인 픽셀이기에 기존 단위로 측정할 수 있는 단위를 갖습니다.

Android 에서는 1dp = 1/160 inch, 또는 0.15875mm

저는 여기서 의문이 생겼습니다. 어찌보면 기존의 inch, mm의 단위체계를 이용해서 가져다 쓰면 되는건데 굳이 새로운 단위체계인 DP를 만드는게 과연 옳은것인가. 새로운 체계이기 때문에 한번 더 변환해야하는 문제가 생기는 것아닐까 라는 것이죠.

실제로 1cm의 버튼을 만들어야한다고 가정했을때 불편해집니다. 근데 만약 dp 대신 cm, mm을 썼으면 간단하게 다음과 같이 표현하겠죠

android:textSize="10mm"

근데 지금 dp 체계에는 애매합니다.

android:textSize="6dp" 또는 "7dp" 

하지만 여기서 생각해본다면 Inch를 쓰는 곳에서 10mm 라는 단위는 어떻게 보면 6dp 또는 7dp 처럼 애매하긴 똑같습니다. 

그래서 여기서 제 뇌피셜로는

각 나라마다 기준이 다르니 차라리 우리(구글,안드로이드)가 기준(DP) 를 만들고 써보자

이렇게 되면 새로운 기준으로 모두 통합시킬 수 있고 다양한 해상도를 지원하는 모바일생태계에 적용가능한 단위가 되는 것이죠.

제가 찾아본 바로는 DP를 만든 이유에 대해 설명하는 글은 없었습니다. 하지만 이미 DP는 모바일, 적어도 안드로이드에서는 표준인 단위가 되었습니다.


Low density (120dpi) : ldpi

Medium density (160dpi) : mdpi

High density (240dpi) : hdpi

Extra High density (320dpi) : xdpi

Extra Extra High density (480dpi) : xxdpi

Extra Extra Extra High density (640dpi) : xxxdpi

 

안드로이드 상에서 dpi와 dp를 구하는 방법

DisplayMetrics outMetrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(outMetrics);

int dpi = outMetrics.densityDpi;

float density =  outMetrics.density;

댓글