Font 클래스
Font 클래스
Font 클래스는 텍스트를 보이는 방식으로 렌더링하는 데 쓰이는 글꼴을 나타내요. 글꼴은 문자 시퀀스를 글리프 시퀀스로 매핑하고, Graphics와 Component 객체에 글리프 시퀀스를 렌더링하는 데 필요한 정보를 제공해요.
본문
문자와 글리프
문자(character)는 글자·숫자·구두점 같은 항목을 추상적으로 나타내는 기호예요. 예를 들어 'g'(LATIN SMALL LETTER G)는 문자예요. 글리프(glyph)는 문자나 문자 시퀀스를 렌더링하는 데 쓰는 모양이에요. 라틴어처럼 단순한 문자 체계에서는 보통 글리프 하나가 문자 하나를 나타내지만, 일반적으로 문자와 글리프는 일대일 대응이 아니에요.
public class Font
extends Object
implements Serializable
예를 들어 'á'(LATIN SMALL LETTER A WITH ACUTE)는 'a' 글리프와 액센트 글리프 두 개로 표현될 수 있어요. 반대로 "fi" 문자열은 "fi" 합자(ligature) 글리프 하나로 나타낼 수 있어요. 아랍어나 남아시아·동남아시아 문자 체계처럼 복잡한 체계에서는 문자의 문맥에 따라 글리프를 선택하고 재배열하기도 해요.
물리 글꼴과 논리 글꼴
Java 플랫폼은 두 종류의 글꼴을 구분해요.
- 물리 글꼴(Physical fonts) — TrueType이나 PostScript Type 1 같은 글꼴 기술로 글리프 데이터와 매핑 테이블을 담은 실제 글꼴 라이브러리예요. 모든 Java 구현은 TrueType을 지원해야 해요. 특정 글꼴이 필요하면
createFont메서드로 번들해서 인스턴스화할 수 있어요. - 논리 글꼴(Logical fonts) — 어떤 Java 런타임 환경에서도 지원해야 하는 다섯 글꼴 패밀리(
Serif,SansSerif,Monospaced,Dialog,DialogInput)예요. 실제 글꼴 라이브러리가 아니라, 런타임이 논리 글꼴 이름을 물리 글꼴로 매핑해요. 매핑은 구현·로케일 의존적이라 모양이 달라질 수 있어요.
글꼴 이름
Font 객체에서는 세 가지 이름을 얻을 수 있어요. 논리 글꼴 이름은 글꼴을 만들 때 사용한 이름이고, 글꼴 얼굴 이름(예: Helvetica Bold)은 특정 글꼴 얼굴의 이름이며, 패밀리 이름(예: Helvetica)은 여러 얼굴에 걸친 타이포그래피 디자인을 결정하는 이름이에요.
GraphicsEnvironment.getAllFonts() 메서드는 시스템에서 사용 가능한 모든 글꼴 얼굴 배열을 반환해요. 기본 글꼴을 deriveFont 메서드로 다양한 크기·스타일·변환·글꼴 기능으로 파생할 수 있어요.
Font와 TextAttribute
Font는 대부분의 TextAttribute를 지원해요. 밑줄 텍스트 렌더링 같은 작업이 편리해지는데, TextLayout 객체를 명시적으로 만들 필요가 없기 때문이에요. 다만 일부 속성값은 직렬화되지 않아서, 그런 값을 가진 Font를 직렬화하면 원본과 같지 않게 역직렬화돼요. FOREGROUND·BACKGROUND는 Paint 값을 쓰고, CHAR_REPLACEMENT는 GraphicAttribute 값을, INPUT_METHOD_HIGHLIGHT는 InputMethodHighlight 값을 써요.
Map 기반 생성자와 deriveFont API는 FONT 속성을 무시해요. 일부 속성은 추가 렌더링 오버헤드를 일으키고 잠재적으로 레이아웃을 호출하는데, 이런 속성이 있으면 hasLayoutAttributes()가 true를 반환해요.