Java 고급 출력 포맷 (이스케이프 시퀀스, printf, format)
1. 이스케이프 시퀀스란?
**이스케이프 시퀀스(Escape Sequence)**는 문자열 내에서 특수한 동작(줄바꿈, 탭, 따옴표 등)을 표현하기 위한 문자 조합이다.
Java에서는\
백슬래시로 시작한다.
1.1 주요 이스케이프 시퀀스
이스케이프 | 의미 | 예시 출력 |
---|---|---|
| 줄바꿈 | 줄을 바꿈 |
| 탭 | 띄어쓰기(보통 4~8칸) |
| 큰따옴표 출력 |
|
| 작은따옴표 출력 |
|
| 백슬래시 출력 |
|
| 캐리지 리턴 | 커서를 맨 앞으로 이동 (거의 안 씀) |
| 백스페이스 | 글자 하나 삭제 (거의 안 씀) |
| 폼 피드 | 페이지 넘김 (거의 안 씀) |
1.2 사용 예시
System.out.println("이름\t나이");
System.out.println("영희\t25");
System.out.println("그는 말했다: \"안녕하세요\"");
System.out.println("C:\\Program Files\\Java");
출력 결과:
이름 나이
영희 25
그는 말했다: "안녕하세요"
C:\Program Files\Java
2. 문자열 포맷 서식 문자
Java에서 문자열을 정해진 형식으로 출력하고 싶을 때 System.out.printf()
또는 String.format()
을 사용한다.
2.1 기본 형식
System.out.printf("형식", 값1, 값2...);
String result = String.format("형식", 값1, 값2...);
2.2 주요 서식 문자
서식 문자 | 설명 | 예시 출력 |
---|---|---|
| 문자열 |
|
| 정수 (10진수) |
|
| 실수 (소수점 가능) |
|
| 문자 |
|
| 줄바꿈 (OS별 호환) |
|
| 퍼센트(%) 출력 |
|
2.3 자리수/정렬 설정
형식 | 설명 |
---|---|
| 전체 5자리, 오른쪽 정렬 |
| 전체 5자리, 왼쪽 정렬 |
| 앞자리를 0으로 채움 (총 5자리) |
| 소수점 둘째자리까지 출력 |
| 전체 6칸 중 소수점 2자리 포함 |
2.4 사용 예시
String name = "영희";
int age = 25;
double score = 93.756;
System.out.printf("이름: %s, 나이: %d%n", name, age);
System.out.printf("점수: %.2f%n", score);
System.out.printf("진행률: %d%%%n", 100);
출력 결과:
이름: 영희, 나이: 25
점수: 93.76
진행률: 100%
3. 요약 비교표
항목 | 예시 | 설명 |
---|---|---|
이스케이프 문자 |
| 문자열 내부 제어 |
서식 문자 (printf) |
| 형식을 지정하여 출력 |
4. 콘솔 색상 출력 (ANSI 컬러)
Java 자체는 콘솔 색상 기능을 제공하지 않지만, 터미널에서 ANSI 코드를 사용하면 출력 색을 변경할 수 있다.
public class ColorExample {
public static final String RED = "\u001B[31m";
public static final String RESET = "\u001B[0m";
public static void main(String[] args) {
System.out.println(RED + "이 문장은 빨간색입니다." + RESET);
}
}
색상 | ANSI 코드 |
---|---|
빨강 |
|
초록 |
|
노랑 |
|
파랑 |
|
리셋 |
|
5. 날짜 및 시간 포맷 출력
Java에서는 java.time.LocalDateTime
과 DateTimeFormatter
를 사용해 날짜/시간을 원하는 형식으로 출력할 수 있다.
5.1 DateTimeFormatter 기본 사용
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println("현재 시간: " + now.format(fmt));
5.2 주요 포맷 패턴
패턴 | 의미 | 예시 |
---|---|---|
| 연도 |
|
| 월 |
|
| 일 |
|
| 시간 (24시간제) |
|
| 시간 (12시간제) |
|
| 분 |
|
| 초 |
|
| 오전/오후 |
/
|
| 요일 |
|
5.3 사용자 지정 포맷 예시
DateTimeFormatter customFmt = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 (E) a hh:mm");
String formatted = now.format(customFmt);
System.out.println("형식화된 시간: " + formatted);
6. 로깅용 포맷 출력
Java에는 기본 로그 시스템인 java.util.logging.Logger
가 있다.
6.1 Logger 기본 사용
import java.util.logging.*;
Logger logger = Logger.getLogger("MyLogger");
logger.info("정보 메시지");
logger.warning("경고 메시지");
logger.severe("에러 메시지");
6.2 포맷 문자열과 함께 쓰기
String name = "다인";
int age = 25;
logger.info(String.format("사용자 이름: %s, 나이: %d", name, age));
6.3 로그 레벨 종류
레벨 | 설명 |
---|---|
| 심각한 오류 |
| 경고 |
| 일반 정보 |
| 설정 관련 정보 |
| 디버깅 수준의 정보 |
6.4 출력 형식 커스터마이징
- 로그 출력 위치(콘솔/파일)
- 출력 메시지 포맷 (시간, 로그 레벨, 메시지 내용 등)
logging.properties
파일로 설정 변경 가능