Android/Kotlin

[Android, Kotlin] dp, sp 단위에 대해 알아보자.

겨울시인 2022. 4. 28. 16:55

크기 단위에 대해 알아보자.

  • 레이아웃이나, 각종 View 또는 텍스트의 크기를 지정할때, 내가 직접 입력한 값으로 설정(hard coding)할 수 있는데
  • 그때 입력 숫자값 뒤에 붙은 단위로 dp, sp 를 쓴다.

 
 

우선 Density 의 dpi 를 이해하자.

  • dpi = dots per inch
    • 화면 상의 일정 물리적 영역안의 픽셀 수를 말한다.
    • 해상도(화면의 총 픽셀 수)가 높다? -> Density(밀도)가 높다 -> dpi 크다
    • 반대로 해상도(화면의 총 픽셀 수)가 낮다? -> Density(밀도)가 낮다 -> dpi 작다

 
 

dp 가 뭐야?

  • dp = Density-independent Pixels
    1. 첫번째, 화면의 물리적 밀도(Density)에 근거한 추상적 단위
    2. 두번째, 레이아웃 크기 또는 위치를 표현하기 위해 UI 레이아웃을 정의할 때 사용해야 하는 가상 픽셀 단위

1 dp = 160 dpi 화면에서의 1개의 물리적 픽셀과 같다. (기준)

  • dp 단위를 화면 픽셀로 변환식하는 식은 다음과 같다
    px = dp * (dpi / 160)
  • (예를 들어 240dpi 화면에서 1dp는 1.5개의 물리적 픽셀)

 
 

왜 Density-independent Pixels (밀도에 독립적인 픽셀) 단위를 쓸까?

  • 단순히 시중에 나와있는 기기(device)들을 떠올려봐도 이해하기 쉽다.
  • 엄청나게 다양한 기기들은 각각의 화면 크기, 해상도 Density를 가진다.
  • 만약 App 을 만들어 배포했는데 어떤 특정 스펙에만 맞추어진 버전으로 내놓겠는가를 생각해보자. No!!
  • 즉, 절대값이 아닌 추상적/가상 단위로 크기를 설정하여 Density가 다른 화면에서 UI가 적절하게 표시되도록 하려면 App의 UI를 정의할 때 항상 dp 단위를 사용해야 한다.
  • 결과적으로 dp 단위를 사용함으로써 각각 기기(device)의 다른 Density, 화면 크기와 상관없이
    내가 원하는 크기를 UI를 그대로 보여줄 수 있게되는 것이다.


이미지 출처 : Understanding Density Independence Pixel: sp, dp, dip and all in android

 
 

sp 가 뭐야?

  • sp : scalable pixels
    dp 단위와 비슷하지만 주로 UI의 텍스트, 폰트 사이즈에 주로 쓰이는 단위로 알려져있다.