Java/객체지향

[객체지향][자바의 정석] 10.2 - 형식화 클래스(숫자, 날짜)

얄루몬 2022. 1. 24. 17:09

1. 형식화 클래스란?

프로그래밍에서 유용한 형식과 화면에서 유용한 데이터 형태는 다르다. 화면에 출력될 때는 문자열만 의미가 있기 때문에 사람이 읽을 수 있도록 가시성이 좋도록 Object의 toString() 메서드를 오버라이딩해서 사용한다.

하지만 오바라이딩해서 사용하기 힘든 두 가지 형태가 있는데, 기본형 숫자와 Date 클래스다.
그래서 숫자 또는 Date를 읽기 쉬운 문자열로 바꾸는데 사용되는 클래스를 형식화 클래스라 한다

형식화 클래스에는 DecimalFormatSimpleDateFormat이 있다.

📌출처:https://itellyhood.tistory.com/85

 

 

  • java.text 패키지의 DecimalFormat, SimpleDateFormat
    • DecimalFormat 숫자를 형식화
    • SimpleDateFormat 날짜를 형식화

 

  • 숫자와 날짜를 원하는 형식으로 쉽게 출력 가능(숫자, 날짜 -> 형식 문자열로)
package javajungsuk;

import java.text.DecimalFormat;

public class Java10_2_1 {

	public static void main(String[] args) {
		double number = 1234567.89;
		DecimalFormat df = new DecimalFormat("#.#E0");
		String result = df.format(number);
		System.out.println(result);
	}

}
<결과값>
1.2E6

 

  • 형식 문자열에서 숫자와 날짜를 뽑아내는 기능(형식 문자열 -> 숫자, 날짜)
package javajungsuk;

import java.text.DecimalFormat;

public class Java10_2_2 {

	public static void main(String[] args) {
		DecimalFormat df = new DecimalFormat("#,###.##");
		//Number - 모든 숫자 래퍼클래스의 최고 조상
		Number num = df.parse("1,234,567.89");
		double d = num.doubleValue();
	}

}

 

 

 

2. 숫자의 형식화 (DecimalFormat)

  • 숫자를 형식화 할 때 사용한다.(숫자 -> 형식 문자열)
    • 즉, 10진수를 문자열로 바꿀때 사용한다.
package javajungsuk;

import java.text.DecimalFormat;

public class Java10_2_1 {

	public static void main(String[] args) {
		double number = 1234567.89;
		DecimalFormat df = new DecimalFormat("#.#E0");
		String result = df.format(number);
		System.out.println(result);
	}

}

숫자를 다양한 형식으로 출력할 수 있게 해주는 숫자의 형식화

우리가 기호에 따라서 패턴을 주면 그에 따른 결과를 나타내준다 또한 조합해서 사용해도 된다. 

 

 

  • 특정 형식의 문자열을 숫자로 변환할 때도 사용한다.(형식 문자열 -> 숫자)
package javajungsuk;

import java.text.DecimalFormat;

public class Java10_2_2 {

	public static void main(String[] args) {
		DecimalFormat df = new DecimalFormat("#,###.##");
		//Number - 모든 숫자 래퍼클래스의 최고 조상
		Number num = df.parse("1,234,567.89");
		double d = num.doubleValue();
	}

}

[참고] Integer.parseInt()는 콤마(,)가 포함된 문자열을 숫자로 변환 못한다.

 

[실습]

문자열 -> 숫자 -> 문자열

package javajungsuk;

import java.text.DecimalFormat;

public class Java10_2_3 {

	public static void main(String[] args) {
		DecimalFormat df = new DecimalFormat("#,###.##");
		DecimalFormat df2 = new DecimalFormat("#.###E0");
		
		try {
			
			//문자를 숫자로 바꿀 땐 parse 사용
			Number num = df.parse("1,234,567.89");
			System.out.println("1,234,567.89" + " -> ");
			
			double d = num.doubleValue();
			System.out.println(d + " -> ");
			
			//숫자를 형식문자열로 바꿀땐 format을 사용
			System.out.println(df2.format(num));
			
		}catch (Exception e) {}


	}

}

 

 

 

3. 날짜의 형식화(SimpleDateFormat)

  • 날짜의 형식화는 날짜와 시간을 다양한 형식으로 출력할 수 있게 해준다. (숫자 -> 문자)
package javajungsuk;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Java10_2_4 {
	public static void main(String[] args) {
		Date today = new Date();
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		
		//오늘 날짜를 yyyy-MM-dd형태로 변환하여 반환
		String result = df.format(today);
		System.out.println(result);
	}
}
<결과>
2022-01-24

날짜와 관련된 기호들

 

 

 

  • 특정 형식으로 되어 있는 문자열에서 날짜와 시간을 뽑아낼 수도 있다.(문자열 -> 숫자)
package javajungsuk;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Java10_2_5 {
	public static void main(String[] args) {
		SimpleDateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일");
		SimpleDateFormat df2 = new SimpleDateFormat("yyyy/MM/dd");
		
		Date d = df.parse("2022년 01년 24일");
		String result = df2.format(d);

	}
}

시간과 관련된 기호들

 

 

 

실습

package javajungsuk;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Java10_2_6 {
	public static void main(String[] args) {
		DateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일");
		DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd");
		
		try {
			Date d = df.parse("2022년 01월 24일");
			System.out.println(df2.format(d));
		} catch(Exception e) {}
	}
}