형식화 클래스

양성빈·2022년 7월 23일
post-thumbnail

참고
자바의 정석
https://altongmon.tistory.com/218

형식화 클래스

형식화 클래스는 java.text 패키지에 포함되어 있으며 숫자, 날짜, 텍스트 데이터를 일정한 형식에 맞게 표현할 수 있는 방법을 객체지향적으로 설계하여 표준화하였다.

형식화 클래스는 형식화에 사용될 패턴을 정의하는데, 데이터를 정의된 패턴에 맞춰 형식화 할 수 있을 뿐만 아니라 역으로 형식화된 데이터에서 원래의 데이터를 얻어낼 수도 있다.

즉, 형식화에 사용될 패턴만 정의해주면 복잡한 로직을 사용하지 않고도, 쉽게 원하는 값을 얻어낼 수 있다.

DecimalFormat

형식화 클래스중에서 숫자를 형식화하는데 사용되는 것이 DecimalFormat이다. DecimalFormat을 이용하면 숫자 데이터를 정수, 부종소수점, 금액등 다양한 형식으로 표현이 가능하며 반대의 역할도 할 수 있다.

DecimalFormat을 사용하는 방법은 인스턴스를 생성한 다음에 참조변수를 통하여 format 메서드를 호출하면 패턴에 맞는 문자열을 얻게 된다. 패턴은 생성자 파라미터로 넣는다.

또한 parse 메서드를 통하여 기호와 문자가 포함된 문자열을 쉽게 숫자로 변환이 가능하다.

SimpleDateFormat

Date와 Calendar 클래스만 가지고 날짜 데이터를 원하는 형태로 다양하게 출력하는 것은 불편하고 복잡하다. 이 점을 고려하여 SimpleDateFormat 클래스가 출범하게 되었다.

💡 참고
DateFormat은 추상클래스로 SimpleDateFormat 클래스의 상위 클래스이다. DateFormat는 추상클래스이므로 직접 인스턴스를 생성할 수 없고 getDateInstance() 메서드를 통하여 인스턴스를 반환해야한다. 반환된 인스턴스는 SimpleDateFormat 인스턴스이다.

기호의미
G연대 (BC, AD)
y년도
M월 (1~12 또는 1월~12월)
w년의 몇 번째 주(1~53)
W월의 몇 번째 주(1~5)
D년의 몇 번째 일 (1~366)
d월의 몇 번째 일 (1~31)
F월의 몇 번째 요일(1~5)
E요일
a오전/오후(AM,PM)
H시간(0~23)
k시간(1~24)
K시간(0~11)
h시간(1~12)
m분(0~59)
s초(0~59)
S천분의 일초(0~999)
zTime zone(General time zone)
ZTime zone(RFC 822 time zone)
'escape문자(특수문자를 표현하는데 사용)

SimpleDateFormat을 사용하는 방법은 간단하다. 먼저 원하는 출력형식의 패턴을 작성하여 SimpleDateFormat 인스턴스를 생성 후, 출력하고자 하는 Date 인스턴스를 가지고 format(Date d)를 호출하면 지정한 출력형식에 맞게 변환된 문자열을 얻게 된다.

또한 parse(String source)를 사용하여 날짜 데이터를 출력형식을 변환하는 방법이 있다.

💡 참고
parse(String source)는 SimpleDateFormat의 상위 클래스인 DateFormat에 정의되어 있다.
지정된 형식과 입력된 형식이 일치하지 않는 경우에는 예외가 발생함으로 적절히 예외처리가 필요하다.

ChoiceFormat

ChoiceFormat은 특정 범위에 속하는 값을 문자열로 변환해준다.

ChoiceFormat 클래스는 파라미터로 limit와 변환할 문자열 배열이 들어가는데 limit은 double형 배열형으로 모두 오름차순으로 정렬되어야 하고 변환할 문자열 배열은 limit 배열의 개수와 일치해야한다. 그렇지 않으면 IllegalArgumentException이 발생한다.

또한 pattern형으로 정의도 가능한데 패턴 구분자로 '#'과 '<'가 있는데 #은 경계값을 포함시키고 <은 경계값을 포함시키지 않는다.

MessageFormat

MessageFormat은 데이터를 정해진 양식에 맞게 출력할 수 있도록 도와준다.
데이터가 들어갈 자리를 마련해 놓은 양식을 미리 작성하고 프로그램을 이용해서 다수의 데이터를 같은 양식으로 출력할 때 사용하면 좋다.

MessageFormat에 사용할 양식인 문자열 msg를 작성할 때, '{숫자}'로 표신된 부분이 데이터가 출력할 자리이며 인덱스는 0부터 시작하고 여러번 반복해서 사용할 수 있다.

또한 객체배열 형태로 받기 때문에 String뿐만 아니라 다른 객체를 지정할 수 있으며 세부 옵션들을 이용하여 다양하게 출력이 가능하다.

⚠️ 주의
홑 따옴표(')는 MessageFormat의 양식에 escape문자로 사용되기 때문에 문자열 msg에서 홑 따옴표를 사용하려면 연속 2번 작성해야한다.

또한 parse(String source)를 이용해서 출력된 데이터로부터 필요한 데이터만 뽑아낼 수 있다.

profile
모든 것을 즐길줄 아는 개발자입니다!

0개의 댓글