스크린의 단위
안드로이드 개발하다 보면 dp와 sp를 자주 사용한다. 쓸 때는 그냥 화면의 단위이겠거니 하면서 썼는데 이번 기회에 제대로 알아보려 한다.
PX(Pixel)
'화소'라고도 하는데 화면을 구성하는 가장 기본이 되는 단위이다. Red, Green, Blue가 하나씩 모인 것을 픽셀이라 한다.

따라서 px로 설정한 화면의 크기는 절대적이며 디스플레이의 해상도가 크면 클수록 화면이 작게 보인다. 모바일 환경은 해상도가 제각각이므로 px단위는 사용하지 않는다.
DPI(Dot Per Inch)
말 그대로 1 제곱인치에 만들어진 점이나 화소 수를 뜻한다. 프린터 출력물이나 디스플레이 해상도의 측정 단위이다. 쉽게 예를 들면 10 dpi는 1인치 너비에 10개의 점이 있다. 따라서 dpi의 값이 클수록 1인치 너비에 들어가는 픽셀의 수가 많은 고 밀도의 디스플레임을 알 수 있다.
안드로이드에는 기본적으로 제공하는 dpi가 몇 가지 있다.
- ldpi(low-density) : 저밀도 화면(~ 120 dpi)에 대한 리소스
- mdpi(medium-density) : 중밀도 화면 (~ 160 dpi )에 대한 리소스 (기본 밀도)
- hdpi(high-density) : 고밀도 화면 (~ 240 dpi)에 대한 리소스
- xhdpi(extra high-density) : 초고밀도 화면 (~ 320 dpi)에 대한 리소스
- xxhdpi(extra extra high-density) : 초초고밀도 화면 (~ 480 dpi)에 대한 리소스
- xxxhdpi(extra extra extra high-density) : 초초초고밀도 화면 (~ 640 dpi)에 대한 리소스
- nodpi : 모든 밀도에 대한 리소스, 밀도 독립적 리소스이며 현재 화면의 밀도에 관계없이 시스템에서 리소스 크기를 조정하지 않는다.
픽셀로 치면 다음과 같다.
- 저밀도(ldpi)의 경우 36x36(0.75x)
- 중밀도(mdpi)의 경우 48x48(1.0x 기준)
- 고밀도(hdpi)의 경우 72x72(1.5x)
- 초고밀도(xhdpi)의 경우 96x96(2.0x)
- 초초고밀도(xxhdpi)의 경우 144x144(3.0x)
- 초초초고밀도(xxxhdpi)의 경우 192x192(4.0x)

DP(Density Independent Pixel)
해석하면 밀도에 독립적인 픽셀로 디스플레이의 해상도(밀도)와 상관없이 다룰 수 있는 단위이다. 파편화가 심한 안드로이드 화면에서 개발한 화면을 동일한 비율로 보여주기 위해 안드로이드에서 정의한 정확한 단위이다. 가장 자주 쓰는 스크린 단위이다.
dp를 쓰다가 px단위로 변환할 일이 생긴다면 px = dp * (dpi / 160)을 이용해서 변환하면 된다.


SP(Scale-independent Pixels)
sp는 텍스트에서 많이 사용된다. dp와 마찬가지로 밀도에 따라서 동일한 비율로 보여준다.
그렇다면 텍스트는 sp를 사용할까?
그 이유는 휴대폰 시스템 설정에서 사용자가 설정한 텍스트의 폰트 크기를 따라가야 하기 때문이다. 부모님들이나 나이 드신 사용자의 경우 글자 크기를 키워서 쓰는 경우가 많으므로 사용자가 읽어야 하는 텍스트 같은 경우 sp로 지정한다. 만약 사용자의 시스템 설정과 상관없이 동일한 화면을 보여줘야 할 경우 dp를 써주면 된다.


'안드로이드 > 기본개념' 카테고리의 다른 글
플로우 차트(Flow Chart) (0) | 2023.03.23 |
---|---|
LiveData (0) | 2022.07.19 |
Inflate (0) | 2022.06.13 |
Activity란? (0) | 2022.06.13 |
Context? (0) | 2022.06.06 |