Developing Myself Everyday
article thumbnail

사진: UnsplashSiora Photography

 

 

 

안드로이드 개발을 하면서 의미도 모르고 사용했던 것이 있습니다. 바로 dpsp입니다.

 

최근에 xml을 작성해 보신 분들이라면, 분명 아래의 멘트를 보셨을 겁니다. 

 

 

또한 Compose 라이브러리에 있는 TextField는 오직 sp만을 지원합니다.

 

그렇기에 저는 이번 게시글에서 지금까지 그냥 지나쳤던 안드로이드의 크기 단위에 대하여 공부하고자 합니다.


 

 

 

여러 가지 단위


 

리소스 유형 더보기  |  Android 개발자  |  Android Developers

이 페이지에서는 부울, 색상, 크기, ID, 정수, 정수 배열, 유형이 지정된 배열 리소스를 비롯하여 외부화할 수 있는 더 많은 리소스 유형을 정의합니다.

developer.android.com

 

 

px

안드로이드의 다양한 단위를 알아보기 전에 가장 기본이 되는 단위를 알아보겠습니다.

 

그것은 바로 px(Pixel)입니다. 만약 Figma를 통해서 디자인을 받는다면, Figma에 있는 뷰들의 크기는 px 단위로 되어있을 것입니다. 

 

 

레이아웃의 크기를 지정할 때 px를 사용하는 것은 서로 다른 화면 밀도를 갖는 장치들 간에 고정된 크기를 부여하는 것이기에 모든 화면에서 동일한 결과를 표출하는 것이 어려워질 수 있습니다.

 

 

dpi

dpiDot Per Inch의 약자로 1인치에 들어갈 수 있는 픽셀의 수를 나타내는 단위입니다. 만약 100 dpi라고 한다면 1인치에 픽셀이 100개가 들어갈 수 있다는 것을 의미합니다. 

 

 

 

이러한 특성으로 안드로이드는 dpi를 기반으로 다양한 디바이스를 분류합니다.

 

 

 

Android는 필요에 따라 자동으로 디바이스의 DPI에 맞게 리소스를 조절합니다. 예를 들어, 만약 이미지가 xhdpi를 위해 디자인되었다면, mdpi 화면을 가진 디바이스에서 Android는 자동으로 이미지를 확대할 것입니다.

 

 

dp

dpDensity-Independent Pixel의 약자입니다. 말 그대로 밀도에 독립적인 픽셀을 말합니다. dp는 화면의 물리적인 픽셀에 결합되지 않은 가상의 픽셀 단위입니다.

 

dp를 사용함으로 다양한 밀도에서도 일관된 크기를 표현할 수 있습니다. 

 

 

 

위의 그림처 각각의 다른 화면에서 동일한 크기의 결과를 확인할 수 있는 것은, 해당 뷰가 dp로 정의되었기 때문입니다.

 

왼쪽의 그림은 오른쪽에 그림에 비해 1인치에 들어갈 수 있는 픽셀의 수가 훨신 적습니다. 그렇기에 dpi가 매우 낮게 측정됩니다. 하지만 우리는 어떤 화면에서든 동일한 크기의 결과를 확인하고 싶습니다. 이때 dp를 사용하게 되면 다양한 디바이스 간에도 동일한 크기로 보이도록 도와줍니다.

 

1dp는 160dpi에서 1픽셀과 거의 동일합니다.

 

 

sp

sp Scale-Independent Pixel의 약자입니다. 기본적으로 dp 단위와 같지만 사용자의 글꼴 크기 환경설정에 의해 확장되기도 합니다. 

 

픽셀에 밀도를 반영한게 dp, dp에서 사용자 글꼴 크기 환결설정을 반영한 것이 sp라 생각하면 됩니다.

 

안드로이드는 이러한 이유 때문에 글꼴의 크기를 지정할 때 자동으로 조정되도록 sp를 사용하도록 권장하고 있고 Compose의 경우에는 Text의 크기를 지정할 때 dp를 사용할 수 없습니다.

 

개발자의 입장에서 이러한 sp의 강요(?)는 반갑지는 않습니다. 사용자에 따라서 글꼴크기가 달라진다면, 이를 대응하기 위해서 화면 구성을 해야 합니다. 간단한 버튼을 구성하더라도 그 안에 Text가 들어간다면 Text의 크기가 커지면서 버튼이 자기 멋대로 바뀌어 버릴 수 있는 가능성이 많습니다.

 

 

em

em은 사실 잘 사용되는 단위는 아닙니다. 다만, Compose의 Text에서 dp를 지원하지 않음으로서 고정되어야 하는 크기를 지정할 때 dp 대신 사용할 수 있기에 알아두면 좋겠다 생각해 가져왔습니다.

 

em은 브라우저의 기본 글꼴을 기준으로 지정되는 크기로 1em은 16픽셀을 의미합니다.

 

 

 

 

마무리하며


이렇게 안드로이드에서 사용되는 단위에 대해서 알아보았습니다. 분명 프로젝트를 진행할 때에 다양한 폰트 사이즈에 대응해야 할 경우가 생길 것이라 생각합니다.

 

특히 Compose는 dp를 지원하지 않기에 앞으로 개발할 Compose 프로젝트에서는 거의 필수적으로 다양한 폰트 사이즈를 고려해야 할 것입니다. (안드로이드는 이걸 원한 걸까요....)

 

 

 

 

Reference

 

리소스 유형 더보기  |  Android 개발자  |  Android Developers

이 페이지에서는 부울, 색상, 크기, ID, 정수, 정수 배열, 유형이 지정된 배열 리소스를 비롯하여 외부화할 수 있는 더 많은 리소스 유형을 정의합니다.

developer.android.com

 

다양한 픽셀 밀도 지원  |  Android 개발자  |  Android Developers

다양한 픽셀 밀도 지원 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android 기기는 다양한 화면 크기(핸드셋, 태블릿, TV 등)로 제공될 뿐만 아니라 화면의

developer.android.com

 

profile

Developing Myself Everyday

@배준형

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!