Text: 개요, 텍스트 표시 및 React Native

저자: IT Sectr 게시일: 2026-07-05 읽는 시간: 9 분

React Native의 Text 컴포넌트는 화면에 텍스트를 표시하는 유일한 방법으로, 웹에서 서로 다른 태그(p, span, h1-h6)를 사용하는 것과 다릅니다. Text는 계단식 스타일 상속, 터치 이벤트 처리 및 자동 줄 바꿈을 위한 중첩을 지원합니다. React Native Docs, 2024에 따르면, Text는 View 다음으로 두 번째로 자주 사용되는 컴포넌트입니다. 이 컴포넌트는 iOS에서 네이티브 UILabel, Android에서 TextView로 렌더링되어 글꼴과 접근성의 올바른 작동을 보장합니다.

핵심 포인트

  • Text는 텍스트 표시를 위한 유일한 React Native 컴포넌트입니다
  • 텍스트의 개별 부분을 스타일링하기 위한 중첩을 지원합니다
  • Text는 상위 Text 컴포넌트로부터 스타일을 상속받습니다
  • iOS에서는 UILabel, Android에서는 TextView로 렌더링됩니다
  • 표시 제어를 위해 numberOfLines와 adjustsFontSizeToFit을 지원합니다

React Native에서 Text란

Text는 텍스트 콘텐츠를 표시하기 위한 React Native 컴포넌트입니다. 웹 개발에서 텍스트를 위한 많은 시맨틱 태그가 있는 것과 달리, React Native에서는 모든 텍스트 요소가 Text를 통해 생성됩니다. 이 컴포넌트는 단순한 텍스트뿐만 아니라 중첩된 Text와 스타일링된 조각이 포함된 복잡한 구조도 표시할 수 있습니다.

Text는 자동으로 줄 바꿈을 처리하고 글꼴 모음, 크기, 색상 및 정렬을 관리합니다. 이 컴포넌트는 터치 이벤트(onPress)를 지원하여 추가 래퍼 없이 클릭 가능한 링크를 만들 수 있습니다. 중요한 제한 사항: Text는 View 내에 직접 중첩할 수 없으며, 다른 Text 컴포넌트 내부나 직접 자식으로만 배치할 수 있습니다.

React Native Nested Text, 2024에 따르면, 중첩된 Text 컴포넌트는 부모로부터 스타일을 상속받습니다. 이를 통해 최상위 수준에서 기본 스타일을 설정하고 특정 조각에 대해 개별 속성을 재정의할 수 있습니다 — 웹에서 span이 CSS와 작동하는 방식과 유사합니다.

Text 컴포넌트의 속성 및 API

Text 컴포넌트는 표시, 동작 및 접근성을 제어하기 위한 props 세트를 제공합니다. 주요 카테고리: 스타일 props(글꼴, 크기, 색상, 정렬), 표시 props(numberOfLines, lineBreakMode) 및 대화형 props(onPress, onLongPress).

텍스트 표시 Props

numberOfLines는 표시되는 줄 수를 제한하고 끝에 줄임표를 추가합니다. ellipsizeMode는 줄임표 위치를 제어합니다(head, middle, tail, clip). adjustsFontSizeToFit은 설정된 경계 내에 텍스트를 맞추기 위해 글꼴 크기를 자동으로 줄입니다. lineBreakMode는 numberOfLines를 초과하는 텍스트를 자르는 방법을 결정합니다.

대화형 Props

Text는 터치 처리를 위해 onPress와 onLongPress를 지원합니다. 이를 통해 TouchableOpacity를 사용하지 않고 텍스트 링크를 만들 수 있습니다. onTextLayout은 렌더링 후 텍스트 레이아웃 정보를 반환합니다 — 애니메이션 및 위치 지정에 유용합니다.

플랫폼별 Props

iOS에서는 disabled(텍스트 비활성화), selectable(선택 활성화), dataDetectorTypes(링크, 전화번호, 주소 자동 감지)를 사용할 수 있습니다. Android에서는 selectable(textSelectable을 통해)과 includeFontPadding(추가 패딩 제거)을 사용할 수 있습니다.

Text와 HTML p 및 span 요소의 차이점

Text는 시각적으로 HTML 태그 p 및 span과 유사하지만 아키텍처 차이가 상당합니다. React Native에는 시맨틱 텍스트 요소가 있는 DOM 모델이 없으며, 모든 텍스트 노드는 다양한 props를 가진 단일 Text 컴포넌트를 통해 처리됩니다.

특성Text (React Native)p / span (HTML)
중첩Text 안의 Text — 스타일 상속p는 p를 포함할 수 없음; span은 p 내부
기본 여백기본 여백 없음p에 margin-block-start/end 있음
줄 바꿈컨테이너 내에서 자동p — 블록, span — 인라인
onPress 처리내장 지원추가 래퍼 필요
스타일 상속예, 부모 Text로부터예, CSS 캐스케이드

핵심 차이점은 Text 중첩을 통한 스타일 상속입니다. 외부 Text에 fontSize: 18과 color: blue가 있으면 모든 중첩된 Text 컴포넌트가 이 스타일을 상속받습니다. 내부 Text에서 특정 값을 설정하여 모든 props를 재정의할 수 있습니다. 이렇게 하면 코드가 절약되고 구조가 더 깔끔해집니다.

텍스트 스타일링 및 글꼴

Text는 타이포그래피를 위한 대부분의 CSS 속성을 지원합니다: fontFamily, fontSize, fontWeight, fontStyle, color, letterSpacing, lineHeight, textAlign, textDecorationLine, textTransform. React Native에서 글꼴은 @font-face가 아닌 플랫폼 수준에서 연결됩니다.

사용자 정의 글꼴 사용

사용자 정의 글꼴을 사용하려면 assets/fonts 폴더에 추가하고 react-native.config.js에서 지정해야 합니다. 애플리케이션을 다시 빌드하면 fontFamily를 통해 글꼴을 사용할 수 있습니다. React Native는 웹 글꼴(Google Fonts)을 직접 지원하지 않으며 .ttf 또는 .otf 파일을 다운로드해야 합니다.

스타일 상속 및 캐스케이드

Text의 상속 메커니즘은 CSS와 다릅니다. 스타일은 Text에서 중첩된 Text로만 전달되며 View에서 Text로는 전달되지 않습니다. 전체 애플리케이션에 글꼴을 설정하려면 Text 컴포넌트의 defaultProps 또는 사용자 정의 래퍼 컴포넌트를 사용합니다.

js
<Text style={{ fontSize: 18, color: '#333' }}>
    This text is 18px and color #333
    <Text style={{ fontWeight: 'bold', color: '#007AFF' }}>
        bold and blue
    </Text>
    back to #333 color
</Text>

이 예제에서 외부 Text는 fontSize: 18과 color: #333을 설정합니다. 내부 Text는 fontSize(18)를 상속받지만 fontWeight를 bold로, color를 #007AFF로 재정의합니다. 외부 Text는 자신의 스타일만 상속받습니다. 이는 HTML에서 중첩된 span이 작동하는 방식과 정확히 유사합니다.

Text를 사용한 실용 예제

React Native에서 Text의 두 가지 일반적인 사용 사례를 살펴보겠습니다: 중첩을 사용한 텍스트 서식 지정과 줄 제한이 있는 클릭 가능한 컴포넌트 만들기입니다.

예제 1: 서식이 있는 뉴스 카드

이 예제에서는 Text를 사용하여 강조 표시된 요소(제목, 날짜, 링크가 있는 콘텐츠)가 포함된 여러 줄 텍스트를 표시합니다.

js
const NewsCard = ({ title, date, content }) => (
    <View style={styles.card}>
        <Text style={styles.title}>{title}</Text>
        <Text style={styles.date}>{date}</Text>
        <Text style={styles.content}>
            {content}
            {' ' }
            <Text
                style={styles.link}
                onPress={() => Linking.openURL(url)}
            >
                Read more
            </Text>
        </Text>
    </View>
);

이 구조에는 각각 고유한 스타일을 가진 세 개의 독립적인 Text 컴포넌트(제목, 날짜, 콘텐츠)가 있습니다. 콘텐츠 Text 내부에는 링크를 위한 onPress가 있는 또 다른 Text가 중첩되어 있습니다. 이 패턴은 뉴스 피드, 블로그 및 댓글에서 사용됩니다.

예제 2: 줄 제한이 있는 텍스트

줄임표가 있는 텍스트 미리보기를 표시하려면 numberOfLines를 사용합니다. 이는 제품 카드 및 기사 목록의 표준 패턴입니다.

js
<Text
    numberOfLines={2}
    ellipsizeMode="tail"
    style={styles.preview}
>
    {longDescription}
</Text>

numberOfLines = 2 속성은 텍스트를 두 줄로 제한합니다. 텍스트가 더 길면 React Native가 자동으로 두 번째 줄 끝에 줄임표를 추가합니다. ellipsizeMode: 'tail' 매개변수는 줄임표가 끝에 있어야 함을 지정합니다(head, middle 및 clip도 사용 가능).

자주 묻는 질문

React Native에 h1, p, span 태그가 없는 이유는 무엇인가요?

React Native는 크로스 플랫폼 호환성을 위해 최소한의 컴포넌트 세트를 사용합니다. 여러 시맨틱 HTML 태그 대신 다양한 스타일을 가진 단일 Text가 사용됩니다. 이렇게 하면 단일 코드베이스에서 두 플랫폼 모두에서 렌더링이 간소화됩니다.

Text를 버튼으로 사용할 수 있나요?

네, Text는 터치 처리를 위해 onPress와 onLongPress를 지원합니다. 그러나 시각적 피드백(누름 강조)이 있는 버튼의 경우 Text 내부에 TouchableOpacity 또는 Pressable을 사용하는 것이 좋습니다. Text.onPress는 기본적으로 시각적 누름 표시를 제공하지 않습니다.

텍스트가 줄 바꿈되지 않는 이유는 무엇인가요?

Text는 컨테이너 내에서 긴 줄만 자동으로 줄 바꿈합니다. 텍스트가 줄 바꿈되지 않으면 부모 View에 너비 제한이 있는지, 스타일에 nowrap이 설정되어 있는지, numberOfLines가 사용 가능한 줄 수를 초과하지 않는지 확인하세요.

Text 내에서 텍스트를 굵게 표시하려면 어떻게 하나요?

fontWeight: 'bold'가 있는 중첩된 Text를 사용하거나 이 스타일이 있는 컴포넌트로 텍스트를 감쌉니다. 더 굵게 표시하려면 fontWeight: '700' 또는 '800'을 사용할 수도 있습니다. 굵기는 장치에서 해당 글꼴 모음의 가용성에 따라 달라집니다.

Text에 이미지를 포함할 수 있나요?

아니요, Text는 다른 Text 컴포넌트나 문자열만 포함할 수 있습니다. Image는 Text의 자식이 될 수 없습니다. 아이콘과 함께 텍스트를 표시하려면 Text와 Image를 형제 요소로 View를 사용하거나 인라인 이미지 지원이 있는 컴포넌트를 사용하세요.

요약

  • Text는 React Native에서 텍스트를 표시하는 유일한 컴포넌트로, 웹의 p, span, h1-h6를 대체합니다
  • 부모 Text 컴포넌트의 스타일 상속을 통한 중첩을 지원합니다
  • 주요 props: numberOfLines, ellipsizeMode, onPress, selectable, adjustsFontSizeToFit
  • Text는 네이티브 UILabel(iOS) 또는 TextView(Android)로 렌더링됩니다
  • 글꼴은 StyleSheet의 fontFamily를 통해 플랫폼 수준에서 연결됩니다
  • Text 스타일은 View에서 상속되지 않습니다 — 명시적 할당 또는 defaultProps가 필요합니다
  • 클릭 가능한 링크의 경우 TouchableOpacity가 아닌 onPress가 있는 중첩된 Text를 사용하세요

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기