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 |
Tags
- Instrumentation
- String
- Postman
- Executors
- 한글조사처리
- AES
- mac
- Log4J
- date
- sha1
- 암호학
- Java
- 이클립스 플러그인 개발
- Callable
- PKCS#8
- JCE
- Runnable
- IPTV
- StringUtils
- xlet
- PKCS
- 자바 암호화
- Executor
- 자바
- DAMO
- 한글조사
- Freemaker
- ACAP
- RSA
- ORM
Archives
- Today
- Total
오늘은 어디로 갈까...
문자열(String) 0x00 본문
1. 자바 프로젝트 만들기
- New -> JavaProject를 실행해서 자바프로젝트를 생성한다.
- Project 명을 여기서는 kr.kangwoo.util이라고 하겠다.
- JDK 1.5를 사용하겠다.
2. 테스트 소스 폴더 추가
- 기본값을 생성했다면 src 란 소스 폴더가 만들어져있는데, 테스트를 위해 test란 소스 폴더를 하나 더 추가하겠다.
- 해당 프로젝트를 선택한후 마우스 우클릭한 다음 Prperties를 실행하면 속성창이 나온다.
- 여기서 Java Build Path를 선택한후 Source 탭에서 Add Folder를 클릭한다.
- 아래와 같은 창이 뜨면, Create New Folder를 클릭후 test 폴더를 생성한다.
장상적으로 생성되었다면, 아래 그림처럼 보일것이다.
3. StringUtils 클래스 생성하기
- src란 이름의 소스폴더 아래에 StringUtils 클래스를 만들자.
- 클래스가 생성되었다면 isBlank(String)란 간단한 메소드를 만들어보도록 하자.
- 이 메소드는 문자열(String)의 좌우 여백문자(white space)를 제거한후, 공백("")이거나 null인지 검사한는 메소드이다.
package kr.kangwoo.util; public class StringUtils { /** * <p>문자열(String)의 좌우 여백문자(white space)를 제거한후, 공백("")이거나 <code>null</code>인지 검사한다.</p> * * @param str 문자열 * @return */ public static boolean isBlank(String str) { return false; } }
- 일단 로직 구현은 나중에 하고 발생할 수 있는 경우의 수에 대해서 생각해보자. 크게 5가지 경우를 생각했는데, 주석에 추가하자.
/** * <p>문자열(String)의 좌우 여백문자(white space)를 제거한후, 공백("")이거나 <code>null</code>인지 검사한다.</p> * * <pre> * StringUtils.isBlank(null) = true * StringUtils.isBlank("") = true * StringUtils.isBlank(" ") = true * StringUtils.isBlank("han") = false * StringUtils.isBlank(" han ") = false * </pre> * * @param str 문자열 * @return */ public static boolean isBlank(String str) { return false; }
4. Test Case 만들기
- 테스트 케이스를 만들어보도록 하자.
- 이 부분은 무시하고 넘어가도 되지만, 이런 방식으로 개발하면 나중에 많은 시행착오를 줄일 수 있다.
- New -> JUnit Test Case를 실행해서 테스트 케이스를 만들자
- JUnit 3.x와 JUnit 4.x를 선택할 수 있는데, 여기서는 JUnit 4.x을 선택하도록 하겠다.
- 처음 테스트 케이스를 만들 경우는 아래처럼 JUnit 라이브러를 빌드 패스에 추가할건지 물어본다.(당연 추가해야한다.)
- 3.x에서는 TestCase 클래스를 상속받고, 테스트할 메소드는 반드시 testXxx()로 생성해야했지만, 4.x에서는 @Test 어노테이션(Annontation)만 달아주면 그 메소드가 테스트 대상이 된다. 한마디로 4.x는 어노테이션으로 움직인다고 보면 된다.
- 기본값으로 생성하면 아래와 같은 코드가 만들어 졌을 것이다.
package kr.kangwoo.util; import org.junit.After; import org.junit.Before; public class StringUtilsTests { @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } }- setUp(), tearDown() 부분은 현재로서는 의미가 없는 부분이기는 하지만 그냥 놔두겠다.
(잘보면 두 메소드 위에 @Before, @After 어노테이션이 붙어 있다.)
- 자, 그럼 isBlank(String) 메소드를 만들어 보도록 하자.
package kr.kangwoo.util; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; public class StringUtilsTests { @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void isBlank() { Assert.assertEquals(StringUtils.isBlank(null), true); Assert.assertEquals(StringUtils.isBlank(""), true); Assert.assertEquals(StringUtils.isBlank(" "), true); Assert.assertEquals(StringUtils.isBlank("han"), false); Assert.assertEquals(StringUtils.isBlank(" han "), false); } }- 실행(Run As -> JUnit Test)보면 아래와 같은 화면이 나온다. 즉, 테스트를 실패했다는 것이다.
- 현재는 무조건 false를 리턴하기에, Assert.assertEquals(StringUtils.isBlank(null), true); 이부분에서 바로 실패를 하는것이다.
5. StringUtils.isBlank(String) 구현하기
- 자, 이제 중요한 로직을 구현해보도록하자.
public static boolean isBlank(String str) { if (str == null) { return true; } return str.trim().equals(""); }- 다시 테스트 케이스를 실행해보자. 성공이라고 나올것이다.
- 위에처럼 구현해도 전혀 문제가 없지만, 코드를 조금 수정해서 어렵게(?) 보이도록 해보자.
public static boolean isBlank(String str) { if (str == null) { return true; } int strLen = str.length(); if (strLen > 0) { for (int i = 0; i < strLen; i++) { if (Character.isWhitespace(str.charAt(i)) == false) { return false; } } } return false; }
- 최적화(?)란 미명아래에 위처럼 변경을 해보았다. 사실 어느것이 더 좋은가는 상황에 따라 달라질 수 있을것이다. 사람의 입장에서 보면, 첫번째꺼는 아주 직관적이다. 두번째꺼는 비비~꼬아놔서 유심히 봐야 뭔지 이해가 갈것이다. 성능의 입장에서 보면 두번째께 아마(Maybe~~) 조금 더 빠를거 같다. 프로그래밍에 정답은 없는 것 같다. 단지.... 취향~~~~~? ^^;
6. 나머지 필요한 메소드도 각자 구현해 보도록 하자. 필자가 자주 쓰는것을 첨부하겠으니 참고하길 바란다. 단, 대충 만들었으니 꼭 검증해보도록.