MessageFormat

MessageFormat클래스는 양식에 맞게 메시지를 형식화하는 편리한 클래스입니다. 주로 DB query에 이 MessageFormat이 쓰이는데, 한번 코드를 보면서 이해하도록 하겠습니다.

기본적인 클래스 사용법은 이렇습니다. 

MessageFormat format=new MessageFormat(
		"Name : {0}\n"+
		"Age : {1}\n"+
		"Name, Age : {0}, {1}");
String[] args= {"reakwon","7"};
System.out.println(format.format(args));

 

중괄호의 숫자가 Arguement들의 인덱스를 나타냅니다. Arguement들은 배열의 행태로 위의 args변수에 문자열 배열로 담겨있습니다. 그래서 {0}은 "reakwon", {1}은 "7"로 치환되게 됩니다. 그래서 그 결과는 아래와 같습니다. 

Name : reakwon
Age : 7
Name, Age : reakwon, 7

 

이런 MessageFormat의 사용처는 MySQL과 같은 query에 주로 사용합니다. SELECT * FROM my_table WHERE id = 'reakwon' 이런 쿼리들을 일반화할때 SELECT * FROM {0} WHERE {1} = '{2}' 식으로 사용할 수가 있죠.

MessageFormat format=new MessageFormat(
		"SELECT * FROM {0} WHERE {1} = {2}");
String[] args= {"my_table","id","'reakwon'"};
System.out.println(format.format(args));

 

결과

 

SELECT * FROM my_table WHERE id = 'reakwon'

 

static 메소드로 객체 생성하지 않고 사용할 수도 있습니다. 일회성으로 사용하려면 아래의 방법으로 간편하게 사용할 수도 있지요. MessageFormat의 static 메소드를 바로 사용하는 것을 알 수 있죠.

	String message="SELECT * FROM {0} WHERE {1} = {2}";
	String[] args= {"my_table","id","'reakwon'"};
	System.out.println(MessageFormat.format(message,args));

 

날짜 형식 

MessageFormat은 문자열로만 받는 것은 아닙니다. 날짜와 시간도 이런식으로 받아볼 수 있습니다. 아래의 예시처럼 출력할 수도 있습니다. 

	String message= "오늘 Date: {0,date}, Time :{0,time}";
	System.out.println(MessageFormat.format(message, new Date()));

 

결과

 

오늘 Date: 2021. 4. 6., Time :오전 12:04:34

 

쉼표와 date, time 등으로 날짜와 시간도 지정할 수 있습니다. new Date()로 시간과 날짜를 볼 수 있습니다. 이때 더 많은 정보를 보고 싶다면 아래처럼 사용하면 됩니다.

String message= "오늘 Date: {0,date,full}, Time :{0,time,full}";
System.out.println(MessageFormat.format(message, new Date()));

 

아래와 같이 요일까지 출력이되며 시간 같은 경우에는 나라의 정보도 확인할 수 있습니다.

 

오늘 Date: 2021년 4월 6일 화요일, Time :오전 12시 7분 11초 대한민국 표준시

 

반대로 간략한 정보를 원한다면 short로 바꿔서 입력해주면 됩니다. 더 많은 FormatType과 FormatStyle을 보시려면 지원하는 형식은 아래를 참고해주세요. 

java8 api document

 

기존의 형식 패턴을 applyPattern()으로 다시 지정해서 사용할 수도 있습니다. 이런 방식은 static 메소드가 아닌 객체를 만들어서 계속 사용할때 사용하는 방법입니다.

	String message= "오늘 Date: {0,date,short}, Time :{0,time,short}";
	MessageFormat format = new MessageFormat(message);
	Object[] args= {new Date()};
	System.out.println(format.format(args));
		
	String newMessage="자세히 \n"+
			"오늘 Date: {0,date,full}, Time :{0,time,full}";
	format.applyPattern(newMessage);
	System.out.println(format.format(args));
		

 

결과

 

오늘 Date: 21. 4. 6., Time :오전 12:14
자세히 
오늘 Date: 2021년 4월 6일 화요일, Time :오전 12시 14분 29초 대한민국 표준시

 

자, 여기까지 MessageFormat에 대한 소개와 사용 예제를 알아보았습니다. 이런 형식 클래스들은 유용한 경우가 많으니 알아두시면 좋을 것 같습니다.

반응형
블로그 이미지

REAKWON

와나진짜

,