pt — 개념, iOS에서 Points 및 스케일링

저자: IT Sectr 게시일: 2026-02-25 읽는 시간: 8 분

pt — points, iOS 및 macOS의 논리적 측정 단위로, 물리적 화면 해상도에서 인터페이스를 추상화합니다. 하나의 point는 비Retina 화면(@1x)에서 1픽셀, Retina(@2x, @3x)에서 2~3픽셀에 해당합니다. 이 문서는 pt의 작동 원리, 다양한 화면에서의 스케일링, CGPoint 및 UIFont.pointSize 사용을 설명합니다.

핵심 내용

  • pt — 물리적 화면 해상도와 무관한 iOS의 논리적 포인트
  • @1x, @2x, @3x — 하나의 포인트에 해당하는 픽셀 수를 결정하는 스케일 팩터
  • CGPoint — pt 단위 좌표를 위한 구조체, 모든 위치 지정 작업의 기초
  • UIFont.pointSize — 포인트 단위의 폰트 크기, 항상 pt로 반환됨
  • 화면 거리: iPhone 15 Pro — 460 PPI 픽셀 밀도에서 1 pt = 3 px

iOS에서 pt란?

pt(point) — 개발자가 물리적 디스플레이 해상도와 무관한 추상 좌표로 인터페이스를 설명할 수 있게 해주는 iOS의 논리적 측정 단위입니다. Apple은 2010년 iPhone 4와 Retina 디스플레이 출시와 함께 points 개념을 도입했습니다. Retina 이전에는 개발자가 직접 픽셀을 사용했습니다 — UI 픽셀 하나가 물리적 픽셀 하나와 동일했습니다.

iOS 좌표계는 포인트를 기반으로 구축되었습니다: 포인트(0,0)는 화면의 왼쪽 상단 모서리에 있으며, X축은 오른쪽, Y축은 아래쪽으로 향합니다. 각 디바이스 클래스별 포인트 단위 화면 크기는 일정합니다: iPhone SE — 375×667 pt, iPhone 15 Pro — 393×852 pt, iPad — 768×1024 pt(세로), 1024×768 pt(가로). 물리적 해상도는 1179×2556 px(iPhone 15 Pro)일 수 있지만 — 개발자는 포인트로 작업합니다.

Apple Human Interface Guidelines에 따르면, 포인트는 UIKit의 기본 추상화입니다. 모든 프레임워크 — UIKit, SwiftUI, Core Graphics, SpriteKit — 는 포인트로 작동합니다. 픽셀로의 변환은 렌더링 단계에서 UIScreen.nativeScale을 통해 자동으로 이루어집니다.

스케일 팩터: @1x, @2x, @3x

스케일 팩터는 하나의 논리적 포인트에 해당하는 물리적 픽셀 수를 결정합니다. Apple은 세 가지 레벨을 사용합니다: @1x — 1 pt = 1 px(Retina 없는 iPad mini, 구형 모델), @2x — 1 pt = 2 px(2020년 이전 대부분의 iPhone, iPad Retina), @3x — 1 pt = 3 px(iPhone X 이상, iPhone 15 Pro 포함).

디바이스pt 단위 크기px 단위 크기스케일
iPhone SE(3세대)375 × 667750 × 1334@2x
iPhone 14390 × 8441170 × 2532@3x
iPhone 15 Pro Max430 × 9321290 × 2796@3x
iPad Pro 12.9"1024 × 13662048 × 2732@2x
iPad mini(6세대)744 × 11331488 × 2266@2x

스케일 팩터는 UIScreen.main.scale(UIKit용) 및 @Environment(\.displayScale)(SwiftUI용)을 통해 확인할 수 있습니다. 에셋 로드 시 사용됩니다: 시스템은 Assets.xcassets에서 @2x 또는 @3x 접미사가 있는 이미지를 자동으로 선택합니다. 개발자는 Retina 디바이스에서 @1x 이미지를 로드해서는 안 됩니다 — 성능과 품질이 저하됩니다.

CGPoint 및 포인트 단위 좌표

CGPoint 구조체는 iOS 및 macOS에서 좌표를 표현하기 위한 기본 타입입니다. x(CGFloat)와 y(CGFloat)의 두 필드를 포함하며, 값은 포인트 단위로 지정됩니다. CGPoint는 모든 Apple 프레임워크에서 사용됩니다: UIKit(frame.origin), Core Graphics(CGContext), SpriteKit(SKNode.position), Core Animation(CALayer.position).

swift
// CGPoint — 포인트 단위 좌표 작업
import UIKit

// 포인트 생성
let point = CGPoint(x: 100.0, y: 200.0)
print("좌표: \(point.x), \(point.y)")

// 수학 연산
let offset = CGPoint(x: 16.0, y: 8.0)
let translated = CGPoint(
    x: point.x + offset.x,
    y: point.y + offset.y
)

// 포인트 간 거리
func distance(from a: CGPoint, to b: CGPoint) -> CGFloat {
    let dx = b.x - a.x
    let dy = b.y - a.y
    return sqrt(dx * dx + dy * dy)
}

// 포인트를 픽셀로 변환
extension CGPoint {
    func toPixels(scale: CGFloat) -> CGPoint {
        CGPoint(x: x * scale, y: y * scale)
    }
}

예제의 toPixels 메서드는 UIScreen.main.scale을 통해 포인트를 물리적 픽셀로 변환하는 방법을 보여줍니다. UIKit에서는 이 변환이 렌더링 시 자동으로 이루어지지만, Core Graphics 및 Metal 작업 시 개발자는 명시적인 픽셀 변환이 필요할 수 있습니다. 모든 애니메이션 계산, 충돌 감지 및 레이아웃은 포인트로 수행됩니다.

UIFont.pointSize 및 타이포그래피

UIFont.pointSize 속성은 폰트 크기를 포인트 단위로 반환합니다 — 이는 iOS에서 표준 타이포그래피 단위로, 인쇄에서 계승되었습니다(1 pt = 1/72인치). Apple은 Mac OS 초기 버전부터 폰트에 pt를 사용해 왔습니다. iOS에서 폰트 크기는 UIFont.systemFont(ofSize:) 또는 SwiftUI Font.system(size:)를 통해 포인트 단위로 지정됩니다.

swift
// Swift에서 UIFont.pointSize 작업
import UIKit

// pt 단위 크기로 폰트 생성
let titleFont = UIFont.systemFont(ofSize: 28.0, weight: .bold)
let bodyFont = UIFont.systemFont(ofSize: 17.0)
let captionFont = UIFont.systemFont(ofSize: 12.0)

// pointSize 읽기
print("제목 크기: \(titleFont.pointSize) pt")

// Dynamic Type — 자동 스케일링
let scaledFont = UIFontMetrics.default.scaledFont(for: bodyFont)
print("스케일링됨: \(scaledFont.pointSize) pt")

// 폰트 크기 비교
func font(from size: CGFloat, weight: UIFont.Weight) -> UIFont {
    UIFont.systemFont(ofSize: size, weight: weight)
}

UIFontMetrics는 iOS 11에 추가된 동적 폰트 스케일링 메커니즘입니다. 사용자의 접근성 설정(Settings > Display & Brightness > Text Size)에 따라 pointSize를 자동으로 조정합니다. UIFontMetrics를 사용하지 않으면 폰트가 스케일링되지 않아 WCAG 접근성 요구 사항을 위반합니다.

pt vs px: 차이점

ptpx의 차이는 iOS 개발을 이해하는 데 중요합니다. pt는 논리적 단위이고, px는 물리적 단위입니다. 하나의 포인트는 스케일 팩터에 따라 1, 2 또는 3픽셀에 해당할 수 있습니다. 개발자는 포인트로 작업하고, 시스템은 래스터화 단계에서 이를 픽셀로 변환합니다.

특성ptpx
단위 유형논리적(디바이스 독립)물리적(하드웨어 픽셀)
해상도 의존성아니오
사용처UIKit, SwiftUI, Core Graphics, 레이아웃이미지, Metal, raw buffer
변환1 pt = scale × px(스케일 1~3)1 px = pt / scale
예시(iPhone 15 Pro)393 × 852 pt1179 × 2556 px

핵심 결론: 동일한 클래스의 모든 디바이스에서 포인트 단위 인터페이스 크기는 동일합니다. 375 pt 너비 화면 — iPhone SE와 iPhone 14(기본 모델) 모두에 적용됩니다. 차이는 그 375 pt에 몇 개의 물리적 픽셀이 들어가는지뿐입니다. 이는 각 디바이스에 대한 수동 적응 없이 통일된 UI를 보장합니다.

SwiftUI에서 pt

SwiftUI에서 개발자는 명시적으로 포인트를 사용하지 않습니다 — 모든 크기는 Dp(디바이스 독립 포인트, pt와 동등)를 통해 지정됩니다. SwiftUI는 렌더링 시 자동으로 스케일 팩터를 적용하지만 환경 값 displayScale을 통해 액세스를 제공합니다.

swift
// SwiftUI — 포인트 및 스케일 팩터 작업
import SwiftUI

struct ContentView: View {
    @Environment(\.displayScale) private var displayScale

    var body: some View {
        VStack(spacing: 16) {
            Text("제목")
                .font(.system(size: 28, weight: .bold))

            Text("본문 예제 텍스트")
                .font(.body)

            HStack {
                Text("스케일 팩터:")
                    .font(.caption)
                Text("\(displayScale, specifier: "%.1f")")
                    .font(.caption.weight(.bold))
            }
        }
        .padding(20)
        .frame(width: 300)
    }
}

SwiftUI는 프레임워크 수준에서 pt를 추상화합니다. .font(.body)는 자동으로 Dynamic Type을 사용합니다 — 폰트 크기가 사용자 설정에 맞게 조정됩니다. SwiftUI는 픽셀 단위의 폰트 크기 지정을 허용하지 않습니다 — Font 및 타이포그래피 시스템을 통해서만 가능합니다. 이는 개발자의 추가 노력 없이 인터페이스 접근성을 보장합니다.

자주 묻는 질문

pt와 px의 차이점은 무엇인가요?

pt — 화면 해상도와 무관한 iOS의 논리적 포인트입니다. px — 디스플레이의 물리적 픽셀입니다. iPhone 15 Pro에서 하나의 포인트는 3픽셀(@3x), iPad Pro에서는 2(@2x)에 해당합니다. 개발자는 항상 포인트로 작업합니다.

디바이스 스케일 팩터를 어떻게 알 수 있나요?

UIKit: UIScreen.main.scale. SwiftUI: @Environment(\.displayScale). 일반적인 값: 1.0(@1x), 2.0(@2x), 3.0(@3x). iPhone 15 Pro Max에서는 값이 3.0입니다.

본문 텍스트에는 어떤 폰트 크기를 사용해야 하나요?

Apple은 본문(UIFontTextStyle.body)에 17 pt를 권장합니다. 제목의 경우 28~34 pt, 캡션의 경우 12~13 pt입니다. Dynamic Type 스타일은 사용자의 접근성 설정에 따라 자동으로 스케일링됩니다.

iOS에서 Dynamic Type이란?

Dynamic Type — iOS 7에 도입된 iOS 자동 폰트 스케일링 시스템입니다. 텍스트가 시스템 폰트 크기 설정(Text Size) 및 접근성 매개변수(Bold Text, Larger Text)에 적응할 수 있게 합니다. UIFontMetrics 또는 SwiftUI Font 스타일을 통해 구현됩니다.

iOS용 @1x 에셋을 만들어야 하나요?

아니요. 최신 Apple 디바이스는 @2x 또는 @3x의 Retina 디스플레이를 사용합니다. @1x 이미지는 Retina가 없는 iPad(iPad 2, iPad mini 1세대)와의 호환성을 위해서만 필요합니다. iOS 13부터 모든 디바이스는 최소 @2x를 지원합니다.

요약

  • pt — 물리적 해상도와 스케일 팩터에서 인터페이스를 추상화하는 iOS 논리적 단위
  • @2x 및 @3x — 포인트당 픽셀 수를 결정하는 Retina 디스플레이용 스케일 팩터
  • CGPoint — 포인트 단위 좌표를 위한 구조체, UIKit의 모든 위치 지정 작업 기초
  • UIFont.pointSize — UIFontMetrics를 통한 Dynamic Type 지원이 포함된 포인트 단위 폰트 크기
  • SwiftUI는 pt를 완전히 추상화하고 자동 적응을 위해 Font 및 Dynamic Type 사용
  • iOS 에셋은 @2x 및 @3x로 제공되어야 하며, 최신 디바이스에는 @1x가 필요하지 않음
  • Dynamic Type — 사용자를 위해 자동으로 폰트를 스케일링하는 필수 접근성 메커니즘

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

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

프로젝트 논의

더 읽어보기