📚dp, px, dpi 개념

개발을 하면서 항상 설정하게 되는 단위인 dp, 솔직히 어떤 개념인지 자세히 알지 못해 항상 다음에 알아봐야지 해놓고는 알아보지 않았다. 미루고 미루던 중 오늘은 꼭 이를 정리하고자 한다.

안드로이드는 다양한 기기에서 실행되며, 각각의 기기의 화면 크기와 밀도는 다양하다. 예컨대 한 기기에서는 제곱인치 당 160픽셀로 구성되어 있는 반면, 다른 기기에서는 같은 공간을 480픽셀로 구성한다. 이러한 차이를 고려하지 않는다면, 이미지가 완전히 잘못된 크기로 나타날 수 있다.


📔px와 ppi

픽셀은 화면을 구성하는 가장 기본이 되는 단위이다. 사각형으로 이루어져 해상도를 나타낸다. 픽셀의 수가 많을수록 고해상도의 이미지라고 할 수 있다. px 단위는 화면의 전체 크기와 상관없이 지정한 수치만큼 표시되는 절대적 표시 단위이므로 안드로이드에서는 px보다 dp 단위를 사용하면 좋다. 이유는 위에서 설명했던 것과 같이 픽셀은 물리적인(고정적인) 크기를 나타낼 수 없기 때문이다. 픽셀의 크기는 ppi(pixel per inch, 1인치 당 몇 개의 픽셀로 이루어져 있는지 나타내는 밀도 단위)를 어떻게 지정했는지에 따라 달라지기 때문이다.

pixel
출처 https://blank2.tistory.com/3


📔dpi

dpi(dot per inch)는 1인치에 들어가는 점을 나타내는 단위이다. ppi와 마찬가지로 개수가 많을수록 고밀도이다. 안드로이드에서의 주요 dpi는 다음과 같다.

dpi 설명
ldpi 120dpi
mdpi 160dpi (기본)
hdpi 240dpi
xhdpi 320dpi
xxhdpi 480dpi
xxxhdpi 640dpi

안드로이드의 기준 dpi인 160dpi의 경우, 밀도 독립 단위인 dp와 px가 같은 크기를 가진다. 즉, 160dpi에서는 1dp는 1px이 된다.

dpi
출처 https://itwiki.kr/w/DPI


📔dp

dp는 픽셀 독립 단위이다. ppi가 다른 디바이스에서 px로 표기한 밀도가 클수록 작게 보인다. 이를 위해 dp를 사용한다. dp는 픽셀과 상관없이 어떤 기기에서도 같은 비율을 유지하기 때문이다.


📖dp의 사용


  • 같은 애플리케이션에 Low, Medium, High-density 화면에 px단위로 크기를 지정 dpi


  • 같은 애플리케이션에 Low, Medium, High-density 화면에 dp단위로 크기를 지정 dpi

📖dp와 px의 단위 변환

코드 작성 시에는 dp를 사용할 수 없기 때문에 px로 바꾸어 주어야 한다.

  • px = dp * (dpi(단말) / 160(기본))
  • dp = px * (160 / dpi)




📝마무리

앞으로의 해당 단위들을 사용 시에는 다시 한번 이 내용들을 유념하며 사용해야겠다. 아무래도 알고 쓰는 게 더 효율적이기 때문이다.