Format
은 틀, 형식을 의미하는 단어입니다. 예를들어 숫자 1000000
보다는 1,000,000
이라는 형식이 있는 형태가 한 눈에 들어오죠?
Format 클래스
는 문자열, 숫자, 날짜, 메세지 등에 형식을 붙여서 보기 편한 상태로 바꿔주는 기능을 제공하고 있습니다. Format 클래스 자체는 추상클래스고 원하는 형식의 포맷 클래스를 불러와서 사용하는 방식으로 사용합니다. 자식클래스로 몇가지가 있긴한데, 자주 사용되는 10진수 포맷과 날짜 포맷 클래스만 여기서 짚어보고 넘어가겠습니다.
DecimalFormat 클래스
는 10진수의 형식 문자열 변환을 수행하는 클래스입니다.
Format의 자식 클래스는 아니고, Format의 자식 클래스인 Number 클래스의 자식 클래스입니다.
사용법은 DecimalFormat
객체를 생성하고 생성자로 원하는 포맷을 전달해줍니다. 이때 포맷은 기호를 이용해서 전달하는데 사용할 수 있는 기호는 다음과 같습니다.
기호 | 설명 |
---|---|
0 | 10진수 출력, 빈자리를 0으로 채움 |
# | 10진수 출력, 빈자리 채우지 않음 |
. | 소수점 |
+ - | 양수, 음수 표시 |
, | 단위 구분 쉼표 |
E | 지수 E 표시 |
; | 패턴 구분자 |
% | %기호 표시 |
이렇게 생성한 포맷은 format()
메소드의 인수로 형식화할 데이터를 전달합니다.
설명만으로는 좀 아리까리한 내용이 있을텐데 그것들은 아래 예제코드를 통해 직접 눈으로 확인해보도록 하겠습니다.
public class Main {
public static void main(String[] args) {
double n = 1234.5678;
DecimalFormat df;
df = new DecimalFormat("00000.00000"); //정수 5자리, 소수점 5자리 표시, 빈자리는 0으로 채움
System.out.println(df.format(n));
df = new DecimalFormat("#.#"); //소수점 1자리까지 표시
System.out.println(df.format(n));
df = new DecimalFormat("+###.###;-###.###"); //양수면 +기호 붙이고, 음수면 -기호 붙이기
System.out.println(df.format(n));
df = new DecimalFormat("#,###.####"); //정수 3번째 자리에 쉼표 붙이기
System.out.println(df.format(n));
}
}
우리나라는 날짜를 년/월/일
의 순서로 표기합니다. 그런데 미국은 월/일/년
, 영국은 일/월/년
의 형태로 날짜를 표기합니다. 이처럼 각 지역마다 다 다른 형태로 날짜 형식을 사용하는데요. 날짜 객체로부터 날짜 정보를 받아 원하는 형식으로 날짜 정보를 출력하기 위해 SimpleDateFormat 클래스
를 사용합니다.
사용법은 SimpleDecimal과 동일합니다. SimpleDateFormat 클래스
에서 포맷으로 전달하는 기호들은 다음과 같습니다.
기호 | 설명 | 기호 | 설명 |
---|---|---|---|
y | 년 | h | 시 - 12시간제 |
M | 월 | H | 시 - 24시간제 |
d | 일 | k | 시 - 1 ~ 24 |
D | 월 없는 일 (1 ~ 365) | K | 시 - 0 ~ 11 |
E | 요일 | m | 분 |
a | 오전 오후 | s | 초 |
w | 년의 몇 번째 주 | S | 밀리초 (1/1000초) |
W | 월의 몇 번째 주 |
h
는 12시간제 시간이고,H
는 24시간제 시간입니다.
k
는 반대로 소문자가 24시간제고 대문자K
가 12시간제입니다.
public class Main {
public static void main(String[] args) {
Date date = new Date();
SimpleDateFormat sdf;
sdf = new SimpleDateFormat("yyyy년 MM월 dd일. HH시 mm분 ss초");
System.out.println(sdf.format(date));
}
}
MessageFormat 클래스
는 데이터를 지정한 형식에 맞춰 출력하도록 해주는 클래스입니다. 원하는 형식을 지정하면 특정 데이터(들)를 원하는 형식에 맞춰서 출력할 수 있습니다.
public class Main {
public static void main(String[] args) {
String msg = "이름: {0}, 휴대폰번호: {1}, 나이: {2}";
Object[][] datas = {
{"김닭", "010-1234-5678", "22"},
{"박오리", "010-8765-4321", "24"}
};
for (int i = 0; i < datas.length; i++) {
String result = MessageFormat.format(msg, datas[i]);
System.out.println(result);
}
}
}