본문 바로가기
■Development■/《Android》

[Android] 텍스트 크기에 dp 대신 sp를 사용해야 하는 이유

by 은스타 2022. 9. 30.
반응형

Android 개발: 텍스트 크기에 dp 대신 sp를 사용해야 하는 이유

안드로이드 앱을 개발하다 보면 텍스트 크기를 지정할 때 어떤 단위를 사용해야 할지 고민하게 됩니다. 특히 dp(Density-independent Pixels)sp(Scale-independent Pixels) 사이에서 선택하는 것은 UI 디자인과 접근성에 큰 영향을 미치는 중요한 결정입니다. 이 글에서는 텍스트 크기에 dp 대신 sp를 사용해야 하는 이유와 각 단위의 특성에 대해 자세히 알아보겠습니다.


목차

  1. dp와 sp의 기본 개념
  2. 텍스트 크기에 sp를 사용해야 하는 이유
  3. dp를 텍스트에 사용했을 때의 문제점
  4. 안드로이드 공식 가이드라인의 권장 사항
  5. 실제 코드에서의 단위 적용 방법
  6. 예외 상황: dp가 적합한 텍스트 케이스
  7. 단위 선택의 영향: 실제 사례
  8. 텍스트 크기 지정 모범 사례
  9. 결론

 

#1. dp와 sp의 기본 개념

안드로이드 개발에서 사용되는 두 가지 주요 크기 단위인 dp와 sp에 대해 명확히 이해해 봅시다.

dp (Density-independent Pixels)

dp는 화면 밀도에 독립적인 픽셀 단위입니다. 다양한 해상도와 화면 크기를 가진 안드로이드 기기에서 일관된 레이아웃을 만들기 위해 사용됩니다.

  • 특징: 화면 밀도에 따라 자동으로 조정됩니다
  • 공식: 1dp = (화면 밀도 / 160) 픽셀
  • 주요 용도: 뷰 크기, 마진, 패딩 등 레이아웃 요소 지정

sp (Scale-independent Pixels)

sp는 dp와 유사하지만 한 가지 중요한 차이점이 있습니다. sp는 화면 밀도뿐만 아니라 사용자의 폰트 크기 설정에도 반응합니다.

  • 특징: 화면 밀도와 사용자 폰트 설정에 따라 조정됩니다
  • 공식: 1sp = (화면 밀도 / 160) * (사용자 폰트 스케일) 픽셀
  • 주요 용도: 텍스트 크기 지정

 

#2. 텍스트 크기에 sp를 사용해야 하는 이유

텍스트 크기를 지정할 때 dp 대신 sp를 사용해야 하는 주요 이유들을 살펴보겠습니다.

접근성 향상

가장 중요한 이유는 접근성입니다. 시력이 좋지 않은 사용자들은 종종 기기의 설정에서 글꼴 크기를 더 크게 조정합니다. sp 단위를 사용하면 이러한 사용자 설정에 앱이 자동으로 반응할 수 있습니다.

사용자 경험 향상

사용자들은 자신에게 가장 편안한 텍스트 크기를 설정하고 모든 앱에서 일관된 경험을 기대합니다. sp 단위를 사용하면 앱이 시스템 설정과 조화를 이루어 더 나은 사용자 경험을 제공할 수 있습니다.

다양한 사용자층 수용

노인, 시각 장애가 있는 사용자, 그리고 단순히 더 큰 텍스트를 선호하는 사용자들까지 다양한 사용자층을 수용할 수 있습니다. 이는 앱의 포용성을 높이고 더 넓은 사용자 기반을 확보하는 데 도움이 됩니다.

 

#3. dp를 텍스트에 사용했을 때의 문제점

텍스트 크기에 dp를 사용하면 어떤 문제가 발생할 수 있는지 살펴보겠습니다.

접근성 제한

dp는 사용자의 폰트 크기 설정을 무시합니다. 이것은 시각 장애가 있거나 작은 텍스트를 읽기 어려운 사용자들에게 큰 불편을 초래할 수 있습니다.

<!-- 잘못된 예: 텍스트에 dp 사용 -->
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="안녕하세요"
    android:textSize="16dp" />  <!-- 문제: dp 사용 -->

안드로이드 스튜디오 경고

안드로이드 스튜디오는 텍스트 크기에 dp를 사용하면 경고를 표시합니다:

Using dp instead of sp for text sizes

이는 개발 가이드라인을 따르지 않고 있음을 알려주는 경고입니다.

리뷰에 부정적 영향

앱 스토어 리뷰에서 "텍스트가 너무 작고 조절할 수 없다"와 같은 불만이 생길 수 있습니다. 이는 앱의 평점과 다운로드 수에 부정적인 영향을 미칠 수 있습니다.

 

#4. 안드로이드 공식 가이드라인의 권장 사항

안드로이드 공식 문서에서는 텍스트 크기 지정에 관해 명확한 가이드라인을 제공합니다.

공식 권장 사항

안드로이드 디자인 가이드라인에 따르면:

"텍스트 크기에는 항상 sp 단위를 사용하세요. 이 단위는 사용자의 폰트 크기 환경 설정에 따라 크기가 조정되어 접근성을 개선합니다."

머티리얼 디자인 지침

머티리얼 디자인 타이포그래피 가이드라인에서도 sp 사용을 권장합니다:

"안드로이드에서는 텍스트에 sp(scale-independent pixels)를 사용하여 사용자 선호도에 맞게 텍스트 크기가 조정될 수 있도록 합니다."

접근성 개선 가이드

안드로이드의 접근성 개선 가이드에서는 sp 사용이 접근성의 핵심 원칙 중 하나라고 설명합니다.

 

#5. 실제 코드에서의 단위 적용 방법

실제 개발 시 올바른 단위를 적용하는 방법을 알아보겠습니다.

XML 레이아웃에서의 적용

<!-- 올바른 예: 텍스트에 sp 사용 -->
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="안녕하세요"
    android:textSize="16sp" />  <!-- 좋음: sp 사용 -->

<!-- 올바른 예: 레이아웃 요소에 dp 사용 -->
<View
    android:layout_width="100dp"
    android:layout_height="1dp"
    android:background="#CCCCCC" />  <!-- 좋음: 높이에 dp 사용 -->

코드에서의 적용

// Java 코드에서 sp 값 설정
float spValue = 16f;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, spValue);
// Kotlin 코드에서 sp 값 설정
val spValue = 16f
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, spValue)

// Kotlin 확장 함수 사용 (일부 라이브러리 제공)
textView.textSize = 16.sp

스타일과 테마에서의 적용

<!-- styles.xml -->
<style name="TextAppearance.App.Headline">
    <item name="android:textSize">24sp</item>
    <item name="android:textStyle">bold</item>
</style>

 

#6. 예외 상황: dp가 적합한 텍스트 케이스

모든 규칙에는 예외가 있습니다. 텍스트 크기에 dp를 사용하는 것이 적합한 몇 가지 경우를 살펴보겠습니다.

고정 크기가 필요한 UI 요소

레이아웃의 특정 부분이 텍스트 크기에 관계없이 항상 동일한 비율을 유지해야 하는 경우가 있습니다. 예를 들어:

  • 시계나 타이머 앱의 숫자
  • 텍스트가 특정 공간에 딱 맞아야 하는 그래픽 UI 요소
  • 레이아웃이 특정 비율로 고정되어야 하는 게임 UI
<!-- 예외 케이스: 시계 앱에서 dp 사용 -->
<TextView
    android:id="@+id/clock_digit"
    android:layout_width="40dp"
    android:layout_height="60dp"
    android:background="@drawable/digit_background"
    android:gravity="center"
    android:textSize="40dp"  <!-- 이 경우 dp 사용이 타당함 -->
    android:text="8" />

아이콘 폰트

아이콘 폰트(FontAwesome, Material Icons 등)를 사용할 때는 dp를 사용하는 것이 더 적합할 수 있습니다. 아이콘은 텍스트가 아니라 UI 요소로 취급되기 때문입니다.

<!-- 아이콘 폰트에 dp 사용 -->
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="@font/material_icons"
    android:text="@string/icon_settings"
    android:textSize="24dp" />

 

#7. 단위 선택의 영향: 실제 사례

단위 선택이 실제 앱에 미치는 영향을 구체적인 사례와 함께 살펴보겠습니다.

사례 연구: 인기 앱의 접근성 분석

많은 인기 앱들을 분석한 결과, sp를 사용한 앱들은 접근성 점수와 사용자 만족도가 더 높았습니다. 특히:

  • 뉴스 앱: 장시간 텍스트를 읽어야 하는 앱에서 sp 사용은 사용자 경험에 큰 영향을 미쳤습니다.
  • 소셜 미디어 앱: 다양한 연령층을 대상으로 하는 앱에서 sp 사용은 더 넓은 사용자층을 확보하는 데 도움이 되었습니다.

시스템 폰트 크기 변경 시 비교

다음은 시스템 폰트 크기를 "매우 큼"으로 설정했을 때 sp와 dp를 사용한 텍스트의 차이를 보여줍니다:

No 단위 기본 크기 시스템 설정 "매우 큼" 적용시
1 16sp 16px (기준 밀도) ~24px (150% 스케일)
2 16dp 16px (기준 밀도) 16px (변화 없음)

이런 차이는 시력이 약한 사용자에게 큰 영향을 미칩니다.

 

#8. 텍스트 크기 지정 모범 사례

텍스트 크기를 지정할 때 따를 수 있는 모범 사례를 알아보겠습니다.

텍스트 스타일 중앙화

모든 텍스트 스타일을 styles.xml에 정의하여 일관성을 유지하세요:

<!-- styles.xml -->
<style name="TextAppearance.App.Headline1">
    <item name="android:textSize">24sp</item>
    <item name="android:fontFamily">@font/roboto_bold</item >
</style>

<style name="TextAppearance.App.Body">
    <item name="android:textSize">16sp</item >
    <item name="android:fontFamily">@font/roboto_regular</item >
</style >

디자인 시스템 사용

머티리얼 디자인이나 자체 디자인 시스템의 타이포그래피 스케일을 따르세요:

<!-- 머티리얼 디자인 타이포그래피 척도 -->
<style name="TextAppearance.App.Headline1" parent="TextAppearance.MaterialComponents.Headline1">
    <!-- 커스터마이징 -->
</style>

다양한 화면 크기 고려

반응형 타이포그래피를 구현하여 화면 크기에 따라 텍스트 크기를 조정하세요:

<!-- values/dimens.xml -->
<dimen name="text_size_headline">20sp</dimen>

<!-- values-sw600dp/dimens.xml (태블릿) -->
<dimen name="text_size_headline">24sp</dimen>
<TextView
    android:textSize="@dimen/text_size_headline" />

최소 텍스트 크기 고려

가독성을 위해 대부분의 텍스트는 최소 12sp 이상으로 설정하세요:

  • 본문 텍스트: 14-16sp
  • 헤드라인: 18-24sp
  • 작은 텍스트(캡션): 12sp
  • 매우 작은 텍스트는 피하세요

 

#9. 결론

텍스트 크기에 sp를 사용하는 것은 안드로이드 개발에서 접근성과 사용자 경험 측면에서 매우 중요한 실천사항입니다. 이는 단순한 스타일 가이드라인이 아니라, 모든 사용자가 앱을 편안하게 사용할 수 있도록 하는 기본적인 접근성 요구사항입니다.

핵심 요약

  • 텍스트 크기에는 sp 사용: 사용자의 폰트 크기 설정을 존중합니다
  • 레이아웃 요소에는 dp 사용: 다양한 화면에서 일관된 UI를 유지합니다
  • 특수 케이스 인식하기: 특정 상황에서는 예외가 있을 수 있으나, 대부분의 경우 sp가 권장됩니다
  • 접근성은 선택이 아닌 필수: 더 많은 사용자에게 도달하고 더 나은 앱을 만들 수 있습니다

앱 개발에서 이러한 단위 선택이 작은 차이로 보일 수 있지만, 모든 사용자에게 포용적인 경험을 제공하는 데 큰 영향을 미친다는 점을 기억하세요. 접근성을 고려한 개발은 결국 모든 사용자에게 더 나은 경험을 제공하는 것입니다.


이 글이 안드로이드 개발에서 텍스트 크기 단위 선택에 대한 이해를 높이는 데 도움이 되었기를 바랍니다. 

긴 글 읽어주셔서 감사합니다.

끝.

 

참고 자료:

반응형