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 클래스를 만들자.
- 이 메소드는 문자열(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 라이브러를 빌드 패스에 추가할건지 물어본다.(당연 추가해야한다.)
- 기본값으로 생성하면 아래와 같은 코드가 만들어 졌을 것이다.
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. 나머지 필요한 메소드도 각자 구현해 보도록 하자. 필자가 자주 쓰는것을 첨부하겠으니 참고하길 바란다. 단, 대충 만들었으니 꼭 검증해보도록.
StringUtils.java