Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Spring Boot
- springdatajpa
- http
- Greedy
- JPQL
- transaction
- jpa
- 그리디
- QueryDSL
- 인프런
- 스프링 핵심 원리
- SpringBoot
- Thymeleaf
- 김영한
- Servlet
- 자바
- 알고리즘
- pointcut
- kotlin
- JDBC
- spring
- db
- 스프링
- 스프링 핵심 기능
- 백준
- java
- Proxy
- AOP
- Exception
- Android
Archives
- Today
- Total
개발자되기 프로젝트
[TypeConverter] Formatter 본문
- Converter 는 입력과 출력 타입에 제한이 없는, 범용 타입 변환 기능을 제공
- 하지만 개발자는 문자를 다른 타입으로 변환하거나, 다른 타입을 문자로 변환하는 상황이 대부분이다.
- 문자를 다른 객체로 변환하거나 객체를 문자로 변환하는 일이 많음.
1. Web Application에서 객체 -> 문자, 문자 -> 객체 변환 예
- 화면에 숫자를 출력
- Integer -> String 출력 시점에 숫자 1000 -> 문자 "1,000" 이렇게 1000 단위에 쉼표를 넣어서 출력하거나
- 또는 "1,000" 라는 문자를 1000 이라는 숫자로 변경해야 한다.
- 날짜 객체를 문자인 "2021-01-01 10:50:11" 와 같이 출력하거나 또는 그 반대의 상황
- Locale
- 여기에 추가로 날짜 숫자의 표현 방법은 Locale 현지화 정보가 사용될 수 있다.
- 이렇게 객체를 특정한 포멧에 맞추어 문자로 출력하거나
- 또는 그 반대의 역할을 하는 것에 특화된 기능이 바로 포맷터( Formatter )이다.
- 포맷터는 컨버터의 특별한 버전으로 이해하면 된다. ->엑셀에서 서식 지정이랑 같음 ㅋㅋㅋㅋㅋ
2. Converter VS Formatter
- Converter 는 범용(객체 객체)
- Formatter 는 문자에 특화(객체 문자, 문자 객체) + 현지화(Locale)
- Converter 의 특별한 버전
3. Formmater 만들기
- 포맷터( Formatter )는 객체를 문자로 변경하고, 문자를 객체로 변경하는 두 가지 기능을 모두 수행
- 따라서 아래 두 인터페이스를 가지고 있음
- String print(T object, Locale locale) : 객체를 문자로 변경한다.
- T parse(String text, Locale locale) : 문자를 객체로 변경한다.
@Slf4j
public class MyNumberFormatter implements Formatter<Number> {
@Override
public Number parse(String text, Locale locale) throws ParseException {
log.info("text={}, locale={}", text,locale);
//"1,000" -> 1000
return NumberFormat.getInstance(locale).parse(text);
}
@Override
public String print(Number object, Locale locale) {
log.info("object={}, locale={}", object, locale);
return NumberFormat.getInstance(locale).format(object);
}
}
- "1,000" 처럼 숫자 중간의 쉼표를 적용하려면 자바가 기본으로 제공하는 NumberFormat 객체를 사용
- Locale 정보를 활용해서 나라별로 포맷을 만듦.
- parse() 를 사용해서 문자를 숫자로 변환한다.
- 참고로 Number 타입은 Integer , Long 과 같은 숫자 타입의 부모 클래스
- print() 를 사용해서 객체를 문자로 변환한다.
4. Test
- parse() 의 결과는 Long 타입.
class MyNumberFormatterTest {
MyNumberFormatter formatter = new MyNumberFormatter();
@Test
void parse() throws ParseException {
Number result = formatter.parse("1,000", Locale.KOREA);
assertThat(result).isEqualTo(1000L); //Long타입
}
@Test
void print(){
String result = formatter.print(1000, Locale.KOREA);
assertThat(result).isEqualTo("1,000");
}
}
5. 참고
- 스프링은 용도에 따라 다양한 방식의 포맷터를 제공한다.
- Fomatter 포맷터
- AnnotationFormatterFactory 필드의 타입이나 애노테이션 정보를 활용할 수 있는 포맷터
- https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#format
6. GitHub : 211002 Formatter
'인프런 > [인프런] 스프링 MVC 2' 카테고리의 다른 글
[TypeConverter] WebApplication, Formatter 적용 (0) | 2021.10.02 |
---|---|
[TypeConverter] Formatter, ConversionService (0) | 2021.10.02 |
[TypeConverter] View Template에 적용 (0) | 2021.10.02 |
[TypeConverter] Spring에Converter 적용 (0) | 2021.10.01 |
[TypeConverter] conversionService (0) | 2021.10.01 |
Comments