목차

String Util Service

개요

시스템을 개발할 때 필요한 문자열 데이터를 다루기 위해 다양한 기능을 사용하도록 서비스한다. 문자열을 다루는 EgovStringUtil Service와 숫자를 다루는 EgovNumericUtil Service, 날짜형식을 다루는 EgovDateUtil Service 그리고 객체 생성 등의 EgovObjectUtil Service 4가지가 있다.

설명

1. EgovStringUtil Service

Pattern matching

String이 특정 Pattern(정규표현식)에 부합하는지 검사한다.

Sample Source
@Test
public void testPatternMatch() throws Exception {
  // pattern match 성공
  String str = "abc-def";
  pattern = "*-*";
  assertTrue(EgovStringUtil.isPatternMatching(str, pattern));
 
  // pattern match 실패
  str = "abc";
  assertTrue(!EgovStringUtil.isPatternMatching(str, pattern));
}

Formatting

다양한 타입의 데이터를 특정 String형식(Format)으로 변환한다.

Sample Source
@Test
public void testTypeConversion() throws Exception {
  // int => string
  assertEquals("1", EgovStringUtil.integer2string(1));
 
  // long => string
  assertEquals("1000000000", EgovStringUtil.long2string(1000000000));
 
  // float => string
  assertEquals("34.5", EgovStringUtil.float2string(34.5f));
 
  // double => string
  assertEquals("34.5", EgovStringUtil.double2string(34.5));
 
  // string => int
  assertEquals(1, EgovStringUtil.string2integer("1"));
  assertEquals(0, EgovStringUtil.string2integer(null, 0));
 
  // string => float
  assertEquals(Float.valueOf(34.5f), Float.valueOf(EgovStringUtil.string2float("34.5")));
  assertEquals(Float.valueOf(10.5f), Float.valueOf(EgovStringUtil.string2float(null, 10.5f)));
 
  // string => double
  assertEquals(Double.valueOf(34.5), Double.valueOf(EgovStringUtil.string2double("34.5")));
  assertEquals(Double.valueOf(34.5), Double.valueOf(EgovStringUtil.string2double(null, 34.5)));
 
  // string => long
  assertEquals(100000000, EgovStringUtil.string2long("100000000"));
  assertEquals(100000000, EgovStringUtil.string2long(null, 100000000));
}

Substring

전체 String 중 일부를 가져온다.

Sample Source
@Test
public void testToSubString() throws Exception {
  String source = "substring test";
 
  assertEquals("test", EgovStringUtil.toSubString(source, 10));
  assertEquals("string", EgovStringUtil.toSubString(source, 3, 9));
}

Trim

전체 String 중 앞뒤에 존재하는 공백 문자(white character)를 제거한다.

Sample Source
@Test
public void testStringTrim() throws Exception {
  String str = "  substring  ";
 
  assertEquals("substring"  , EgovStringUtil.trim(str));
  assertEquals("substring  ", EgovStringUtil.ltrim(str));
  assertEquals("  substring", EgovStringUtil.rtrim(str));
}

Concatenate

두 String을 붙여서 하나의 String을 생성한다.

Sample Source
@Test
public void testConcat() throws Exception {
  String str1 = "substring";
  String str2 = "test";
 
  assertEquals("substringtest", EgovStringUtil.concat(str1, str2));
}

Find

전체 String 중 특정 String Pattern이 있는지 찾는다.

Sample Source
@Test
public void testFindPattern() throws Exception {
  String pattern = "\\d{4}-\\d{1,2}-\\d{1,2}";
 
  // 일치하는 pattern 을 찾는다.
  Matcher matcher = Pattern.compile(pattern).matcher("2009-02-03");    	
  assertTrue(matcher.find());
 
  // 일치하는 pattern 을 찾는다.
  matcher = Pattern.compile(pattern).matcher("abcdef2009-02-03abcdef");
  assertTrue(matcher.find());
 
  // 일치하는 pattern 을 찾지 못한다.
  matcher = Pattern.compile(pattern).matcher("abcdef2009-02-A3abcdef");
  assertFalse(matcher.find());
}

2. EgovNumericUtil Service

숫자체크, 더하기, 빼기, 곱하기, 나누기, 올림, 내림 기능

숫자체크 기능

주어진 문자열이 숫자형식인지 검사한다.

Sample Source
@Test
public void testIsNumber() throws Exception {
  assertFalse(EgovNumericUtil.isNumber("abc"));
  assertFalse(EgovNumericUtil.isNumber("!@"));
  assertFalse(EgovNumericUtil.isNumber("ab-123"));
  assertTrue(EgovNumericUtil.isNumber("-123"));
  assertTrue(EgovNumericUtil.isNumber("1234"));
}

더하기 기능

두 문자열 값의 덧셈을 실행한다.

Sample Source
@Test
public void testPlus() throws Exception {
  assertEquals("400",      EgovNumericUtil.plus("151", "249"));
  assertEquals("400.0000", EgovNumericUtil.plus("151.7531", "248.2469"));
  assertEquals("400.000",  EgovNumericUtil.plus("151.7531", "248.2469", 3));
  assertEquals("399.9654", EgovNumericUtil.plus("151.7531", "248.2123"));
  assertEquals("399.966",  EgovNumericUtil.plus("151.7531", "248.2123", 3, EgovNumericUtil.ROUND_UP));
  assertEquals("399.965",  EgovNumericUtil.plus("151.7531", "248.2123", 3, EgovNumericUtil.ROUND_DOWN));
  assertEquals("399.97",   EgovNumericUtil.plus("151.7531", "248.2123", 2, EgovNumericUtil.ROUND_HALF_UP));
}

빼기 기능

두 문자열 값의 뺄셈을 실행한다.

Sample Source
@Test
public void testMinus() throws Exception {
  assertEquals("89",       EgovNumericUtil.minus("240", "151"));
  assertEquals("96.4938",  EgovNumericUtil.minus("248.2469", "151.7531"));
  assertEquals("96.49380", EgovNumericUtil.minus("248.2469", "151.7531", 5));
  assertEquals("96.4592",  EgovNumericUtil.minus("248.2123", "151.7531"));
  assertEquals("96.460",   EgovNumericUtil.minus("248.2123", "151.7531", 3, EgovNumericUtil.ROUND_UP));
  assertEquals("96.459",   EgovNumericUtil.minus("248.2123", "151.7531", 3, EgovNumericUtil.ROUND_DOWN));
  assertEquals("96.46",    EgovNumericUtil.minus("248.2123", "151.7531", 2, EgovNumericUtil.ROUND_HALF_UP));
}

곱하기 기능

두 문자열 값의 곱셈을 실행한다.

Sample Source
@Test
public void testMultiply() throws Exception {
  assertEquals("180",       EgovNumericUtil.multiply("15", "12"));
  assertEquals("189.6135",  EgovNumericUtil.multiply("15.23", "12.45"));
  assertEquals("189.61350", EgovNumericUtil.multiply("15.23", "12.45", 5));
  assertEquals("189.614",   EgovNumericUtil.multiply("15.23", "12.45", 3, EgovNumericUtil.ROUND_UP));
  assertEquals("189.613",   EgovNumericUtil.multiply("15.23", "12.45", 3, EgovNumericUtil.ROUND_DOWN));
  assertEquals("189.61",    EgovNumericUtil.multiply("15.23", "12.45", 2, EgovNumericUtil.ROUND_HALF_UP));
}

나누기 기능

두 문자열 값의 나눗셈을 실행한다.

Sample Source
@Test
public void testDivide() throws Exception {
  assertEquals("1.25",  EgovNumericUtil.divide("15", "12"));
 
  Class<Exception> exceptionClass = null;
  try {
  	assertEquals("1.2232931726907630522088353413655", EgovNumericUtil.divide("15.23", "12.45"));
  } catch (Exception e) {
  	log.error("### Exception : " + e.toString());
  	exceptionClass = (Class<Exception>) e.getClass();
  } finally {
  	assertEquals(ArithmeticException.class, exceptionClass);
  }
 
  assertEquals("1.22",  EgovNumericUtil.divide("15.23", "12.45", 5));
  assertEquals("1.224", EgovNumericUtil.divide("15.23", "12.45", 3, EgovNumericUtil.ROUND_UP));
  assertEquals("1.223", EgovNumericUtil.divide("15.23", "12.45", 3, EgovNumericUtil.ROUND_DOWN));
  assertEquals("1.22",  EgovNumericUtil.divide("15.23", "12.45", 2, EgovNumericUtil.ROUND_HALF_UP));
}

올림, 내림 기능

주어진 값의 반올림, 올림, 내림을 실행한다.

Sample Source
@Test
public void testScale() throws Exception {
  assertEquals("151.754", EgovNumericUtil.setScale("151.7531", 3, EgovNumericUtil.ROUND_UP));
  assertEquals("151.753", EgovNumericUtil.setScale("151.7531", 3, EgovNumericUtil.ROUND_DOWN));
  assertEquals("151.753", EgovNumericUtil.setScale("151.7531", 3, EgovNumericUtil.ROUND_HALF_UP));
}

3. EgovDateUtil Service

날짜계산, 현재일자 조회, 요일, 날짜형식체크 기능

날짜계산 기능

주어진 날짜에 해당 년,월 또는 일자를 더하여 계산된 일자를 조회한다.

Sample Source
@Test
public void testCalcDate() throws Exception {
  assertEquals("20100114",  EgovDateUtil.getCalcDateAsString ("2009", "3", "20", 300, "day"));
  assertEquals("2010",      EgovDateUtil.getCalcYearAsString ("2009", "3", "20", 300, "day"));
  assertEquals("01",        EgovDateUtil.getCalcMonthAsString("2009", "3", "20", 300, "day"));
  assertEquals("14",        EgovDateUtil.getCalcDayAsString  ("2009", "3", "20", 300, "day"));
 
  assertEquals(2010,        EgovDateUtil.getCalcYearAsInt ("2009", "3", "20", 300, "day"));
  assertEquals(1,           EgovDateUtil.getCalcMonthAsInt("2009", "3", "20", 300, "day"));
  assertEquals(14,          EgovDateUtil.getCalcDayAsInt  ("2009", "3", "20", 300, "day"));
}

시작일자와 종료일자 및 두 시간 사이의 일자/밀리초 수를 계산한다.

Sample Source
@Test
public void testDayCount() throws Exception {
  assertEquals(90,  EgovDateUtil.getDayCount("20090101", "20090401"));
  assertEquals(90,  EgovDateUtil.getDayCountWithFormatter("20090101", "20090401", "yyyyMMdd"));
  assertEquals(182, EgovDateUtil.getDayCountWithFormatter("2008/12/01", "2009/06/01", "yyyy/MM/dd"));
}
 
@Test
public void testTimeCount() throws Exception {
  assertEquals(86400000, EgovDateUtil.getTimeCount("20090401",       "20090402"));
  assertEquals(60000,    EgovDateUtil.getTimeCount("20090301000000", "20090301000100"));
  assertEquals(3600000,  EgovDateUtil.getTimeCount("20090301000000", "20090301010000"));
}

현재일자 조회 기능

현재 일자를 조회한다.

Sample Source
@Test
public void testCurrentDate() throws Exception {
  assertEquals(Calendar.getInstance().get(Calendar.YEAR),         EgovDateUtil.getCurrentYearAsInt());
  assertEquals(Calendar.getInstance().get(Calendar.MONTH) + 1,    EgovDateUtil.getCurrentMonthAsInt());
  assertEquals(Calendar.getInstance().get(Calendar.DAY_OF_MONTH), EgovDateUtil.getCurrentDayAsInt());
  assertEquals(Calendar.getInstance().get(Calendar.HOUR_OF_DAY),  EgovDateUtil.getCurrentHourAsInt());
  assertEquals(Calendar.getInstance().get(Calendar.MINUTE),       EgovDateUtil.getCurrentMinuteAsInt());
}

요일 기능

입력 일자의 해당 요일을 조회한다.

Sample Source
@Test
public void testGetDayOfWeek() throws Exception {
  assertEquals("일", EgovDateUtil.getDayOfWeekAsString("2009", "03", "22"));
  assertEquals("월", EgovDateUtil.getDayOfWeekAsString("2009", "03", "23"));
  assertEquals("화", EgovDateUtil.getDayOfWeekAsString("2009", "03", "24"));
  assertEquals("수", EgovDateUtil.getDayOfWeekAsString("2009", "03", "25"));
  assertEquals("목", EgovDateUtil.getDayOfWeekAsString("2009", "03", "26"));
  assertEquals("금", EgovDateUtil.getDayOfWeekAsString("2009", "03", "27"));
  assertEquals("토", EgovDateUtil.getDayOfWeekAsString("2009", "03", "28"));
}

두 일자 사이에 해당 요일의 수를 조회한다.

Sample Source
@Test
public void testGetDayOfWeek() throws Exception {
  assertEquals(5,  EgovDateUtil.getDayOfWeekCount("20090301", "20090331", "일요일"));
  assertEquals(4,  EgovDateUtil.getDayOfWeekCount("20090301", "20090331", "토요일"));
  assertEquals(22, EgovDateUtil.getDayOfWeekCount("20090101", "20090531", "일"));
  assertEquals(52, EgovDateUtil.getDayOfWeekCount("20090101", "20091231", "일"));
  assertEquals(52, EgovDateUtil.getDayOfWeekCount("20090101", "20091231", "금"));
  assertEquals(52, EgovDateUtil.getDayOfWeekCount("20090101", "20091231", "토"));
}

날짜 형식 체크 기능

해당 날짜의 형식이 적합성을 조회한다.

Sample Source
@Test
public void testDateFormatCheck() throws Exception {
  // 형식이 틀린경우 ParseException 발생
  Class<Exception> exceptionClass = null;
 
  try {
  	dateFormatCheck = EgovDateUtil.dateFormatCheck("20090300");
  } catch (Exception e) {
  	exceptionClass = (Class<Exception>) e.getClass();
  } finally {
  	assertEquals(ParseException.class, exceptionClass);
  }
}

4. EgovObjectUtil Service

클래스명으로 객체를 생성하며 객체는 파라미터가 없는 기본 생성자 또는 파라미터가 존재하는 생성자 등 다양한 형태로 객체를 인스턴스화 할 수 있다.

Instantiate 기능

파라미터가 없는 기본 생성자로 객체를 인스턴스화 한다.

Sample Source
@Test
public void testInstantiate() throws Exception {
  String className = "java.lang.String";
  Object object = EgovObjectUtil.instantiate(className);
 
  String string = (String) object;
  string = "eGovFramework";
  assertEquals("Framework", string.substring(4));
}

Instantiate 기능 - 생성자의 파라미터 포함

파라미터가 존재하는 형태의 생성자로 객체를 인스턴스화 한다.

Sample Source
@Test
public void testInstantiateParamConstructor() throws Exception {
  String className = "java.lang.StringBuffer";
  String[] types = new String[]{"java.lang.String"};
  Object[] values = new Object[]{"전자정부 공통서비스"};
 
  StringBuffer sb = (StringBuffer)EgovObjectUtil.instantiate(className, types, values);
  sb.append(" 및 개발프레임워크 구축 사업");		
  assertEquals("전자정부 공통서비스 및 개발프레임워크 구축 사업", sb.toString());
}

N. 참고자료