Typography

Montage 디자인 시스템의 타이포그래피 체계

enum Typography

Overview

Typography는 Montage 디자인 시스템에서 사용되는 모든 텍스트 스타일을 정의합니다. 폰트 크기, 두께, 자간, 행간 등 텍스트의 시각적 특성을 일관되게 적용할 수 있도록 표준화된 타이포그래피 시스템을 제공합니다.

// UIKit에서 사용
let label = UILabel()
label.font = UIFont.font(variant: .body1, weight: .regular)

// SwiftUI에서 사용
Text("Hello, World!")
    .typography(variant: .heading1, weight: .bold, semantic: .foregroundNeutralPrimary)

Note

텍스트 스타일을 적용할 때는 일관성을 위해 직접 폰트를 지정하기보다 Typography 시스템을 사용하는 것이 권장됩니다.

Topics

Enumerations

enum Variant

텍스트 변형을 정의하는 열거형

  • Overview

    Variant는 텍스트의 용도와 계층 구조에 따라 서로 다른 사이즈, 자간, 행간 값을 갖는 텍스트 스타일을 정의합니다.

    계층 구조:

    • Display: 가장 크고 강조된 텍스트 (배너, 랜딩 페이지 등)
    • Title: 주요 제목 텍스트
    • Heading: 중간 크기의 제목 텍스트
    • Headline: 소제목 텍스트
    • Body: 기본 본문 텍스트
    • Label: 작은 텍스트 (버튼, 폼 레이블 등)
    • Caption: 가장 작은 보조 텍스트

Enumeration Cases

case body1

기본 본문 텍스트

case body1Reading

긴 텍스트용 본문

case body2

작은 본문 텍스트

case body2Reading

긴 텍스트용 작은 본문

case caption1

캡션 텍스트

case caption2

작은 캡션 텍스트

case display1

가장 큰 디스플레이 텍스트

case display2

큰 디스플레이 텍스트

case display3

중간 디스플레이 텍스트

case heading1

주요 헤딩

case heading2

보조 헤딩

case headline1

강조 헤드라인

case headline2

일반 헤드라인

case label1

라벨 텍스트

case label1Reading

긴 텍스트용 라벨

case label2

작은 라벨 텍스트

case title1

대제목

case title2

중간 제목

case title3

소제목

Instance Properties

var fontHeight: CGFloat

각 변형에 대한 폰트 높이

var fontSize: CGFloat

각 변형에 대한 폰트 크기

var lineHeight: CGFloat

각 변형에 대한 행 높이

var lineSpacing: CGFloat

각 변형에 대한 행간 높이

var textStyle: Font.TextStyle

Dynamic Type 스케일의 기준이 되는 SwiftUI 텍스트 스타일.

  • Discussion

    각 variant의 고정 크기는 그대로 두되, 사용자가 시스템 글자 크기를 키우면 여기에 매핑된 텍스트 스타일의 스케일 곡선을 따라 커진다. 큰 글자(display/title)는 완만하게, 작은 글자(caption)는 더 적극적으로 커지도록 역할·크기가 가장 가까운 스타일에 연결한다.

    단 Typography.Variant.caption2는 이름이 같은 .caption2 대신 Typography.Variant.caption1과 같은 .caption을 쓴다. .caption2 곡선만 유독 가팔라서(11pt 기준 xLarge 15pt, xxxLarge 19pt) 가장 작아야 할 caption2가 caption1·label2를 추월하고 xxxLarge에서는 label1과 같아진다. 같은 곡선에 두면 caption2가 caption1 아래 자리를 지켜 크기 위계가 모든 단계에서 보존된다.

var tracking: CGFloat

각 변형에 대한 자간 (letter spacing)

var uiTextStyle: UIFont.TextStyle

Dynamic Type 스케일의 기준이 되는 UIKit 텍스트 스타일. textStyle과 동일한 논리이며 UIKit 케이스 이름(.title1, .caption1)만 다르다.

enum Weight

폰트 두께를 정의하는 열거형

  • Overview

    Weight는 텍스트의 시각적 강조를 위한 세 가지 기본 두께를 제공합니다. 텍스트의 중요도나 계층 구조에 따라 적절한 두께를 선택하여 사용합니다.

Enumeration Cases

case bold

굵은 두께

case medium

중간 두께

case regular

일반 두께

Instance Properties

var pretendardWeight: Pretendard.Weight

Pretendard 폰트 두께 매핑

Associated Extensions

extension UIFont
static func font(size: CGFloat, weight: Typography.Weight) -> UIFont?

Montage 디자인 시스템의 폰트를 생성합니다.

  • Parameters

    ParameterDescription
    size폰트 크기
    weight폰트 두께
  • Return Value

    생성된 UIFont 인스턴스. 폰트를 찾을 수 없는 경우 nil 반환

  • Discussion

    Note

    반환 폰트는 .body 기준 Dynamic Type 스케일이 적용된다. 실행 중 글자 크기 변경에 반응하려면 사용하는 뷰에서 adjustsFontForContentSizeCategory = true를 설정해야 한다.

static func font(variant: Typography.Variant, weight: Typography.Weight) -> UIFont

Montage 디자인 시스템의 폰트를 생성합니다.

  • Parameters

    ParameterDescription
    variant텍스트 변형
    weight폰트 두께
  • Return Value

    생성된 UIFont 인스턴스. 폰트를 찾을 수 없는 경우 시스템 폰트로 대체

  • Discussion

    Note

    반환 폰트는 variant별 텍스트 스타일(uiTextStyle) 기준 Dynamic Type 스케일이 적용된다. 실행 중 글자 크기 변경에 반응하려면 사용하는 뷰에서 adjustsFontForContentSizeCategory = true를 설정해야 한다.

extension Font
static func font(size: CGFloat, weight: Typography.Weight) -> Font

Montage 디자인 시스템의 폰트를 생성합니다.

  • Parameters

    ParameterDescription
    size폰트 크기
    weight폰트 두께
  • Return Value

    생성된 Font 인스턴스

static func font(variant: Typography.Variant, weight: Typography.Weight) -> Font?

Montage 디자인 시스템의 폰트를 생성합니다.

  • Parameters

    ParameterDescription
    variant텍스트 변형
    weight폰트 두께
  • Return Value

    생성된 Font 인스턴스

extension UILabel
static func label(String, variant: Typography.Variant, weight: Typography.Weight, color: UIColor) -> UILabel

Montage 디자인 시스템의 스타일을 적용한 UILabel을 생성합니다.

  • Parameters

    ParameterDescription
    string표시할 문자열
    variant텍스트 변형
    weight폰트 두께
    color색상
  • Return Value

    생성된 UILabel 인스턴스

static func label(String, variant: Typography.Variant, weight: Typography.Weight, semantic: Color.Semantic) -> UILabel

Montage 디자인 시스템의 스타일을 적용한 UILabel을 생성합니다.

  • Parameters

    ParameterDescription
    string표시할 문자열
    variant텍스트 변형
    weight폰트 두께
    semantic시맨틱 색상
  • Return Value

    생성된 UILabel 인스턴스

extension Text
func typography(variant: Typography.Variant, weight: Typography.Weight, color: SwiftUI.Color) -> Text

타이포그래피 변형에 따른 스타일을 적용합니다.

  • Parameters

    ParameterDescription
    variant텍스트 변형
    weight폰트 두께
    color색상
  • Return Value

    스타일이 적용된 Text 인스턴스

func typography(variant: Typography.Variant, weight: Typography.Weight, semantic: Color.Semantic) -> Text

타이포그래피 변형에 따른 스타일을 적용합니다.

  • Parameters

    ParameterDescription
    variant텍스트 변형
    weight폰트 두께
    semantic시맨틱 색상
  • Return Value

    스타일이 적용된 Text 인스턴스

func paragraph(variant: Typography.Variant, weight: Typography.Weight, color: SwiftUI.Color) -> some View

타이포그래피 변형에 따른 단락 스타일을 적용합니다.

  • Parameters

    ParameterDescription
    variant텍스트 변형
    weight폰트 두께
    color색상
  • Return Value

    단락 스타일이 적용된 View

func paragraph(variant: Typography.Variant, weight: Typography.Weight, semantic: Color.Semantic) -> some View

타이포그래피 변형에 따른 단락 스타일을 적용합니다.

  • Parameters

    ParameterDescription
    variant텍스트 변형
    weight폰트 두께
    semantic시맨틱 색상
  • Return Value

    단락 스타일이 적용된 View

extension View
func adjustLineHeight(variant: Typography.Variant) -> some View

타이포그래피 변형에 따른 줄 높이를 적용합니다.

  • Parameters

    ParameterDescription
    variant텍스트 변형
  • Return Value

    줄 높이가 적용된 View

extension NSAttributedString
static func attributedString(String, variant: Typography.Variant, weight: Typography.Weight, color: SwiftUI.Color, lineBreakMode: NSLineBreakMode) -> NSAttributedString

Montage 디자인 시스템의 타이포그래피를 적용한 NSAttributedString을 생성합니다.

  • Parameters

    ParameterDescription
    string변환할 문자열
    variant타이포그래피 변형, 생략하면 기본값으로 .body1 적용
    weight폰트 두께, 생략하면 기본값으로 .regular 적용
    color색상, 생략하면 기본값으로 .semantic(.foregroundNeutralPrimary) 적용
    lineBreakMode줄바꿈 모드, 생략하면 기본값으로 .byWordWrapping 적용
  • Return Value

    Montage 스타일이 적용된 NSAttributedString

static func attributedString(String, variant: Typography.Variant, weight: Typography.Weight, semantic: Color.Semantic, lineBreakMode: NSLineBreakMode) -> NSAttributedString

Montage 디자인 시스템의 타이포그래피를 적용한 NSAttributedString을 생성합니다.

  • Parameters

    ParameterDescription
    string변환할 문자열
    variant타이포그래피 변형, 생략하면 기본값으로 .body1 적용
    weight폰트 두께, 생략하면 기본값으로 .regular 적용
    semantic의미론적 색상
    lineBreakMode줄바꿈 모드, 생략하면 기본값으로 .byWordWrapping 적용
  • Return Value

    Montage 스타일이 적용된 NSAttributedString

© 2026 Wanted Lab, Inc.