전체 글434 2.5.2 정규 표현식 정규 표현식(regular expression은 문자열 조작을 지원하는 도구이다. "손에 잡히는 정규 표현식" (벤 포터 저/김경수 역, 인사이트(insight), 2009년) 책은 정규표현식을 통해 해결할 수 있는 문제들을 정리하고 있다. 일부 상황을 인용해 본다. · 대소문자를 구별하지 않고 car라는 텍스트가 포함된 파일을 찾는데, 단어 중간에 car가 들어 있는 경우에는 제외하고 싶다(예 scar, carry, incarcerate). · 소스코드를 수정하다가 size라는 글자를 모두 iSize로 치환하고 싶다. 하지만 다른 단어 사이에 size라는 철자가 포함된 경우는 제외하고 오직 size라는 단어만 치환하고 싶다. · 컴퓨터 파일시스템에 존재하는 파일 목록을 모두 보다가 Application.. 2025. 1. 13. 2.5.1 테스트 주도 개발(Test Driven Development, 이하 TDD)과 리팩토링 테스트 관련 내용을 학습하면 반드시 등장하는 것이 TDD 이다. TDD를 바로 연습하는 것도 좋지만 그보다는 JUnit을 활용해 테스트를 검증하는 방식으로 진행하다 한 단계 더 성장하고 싶을 때 도전할 것을 추천한다.안정적으로 리팩토링을 하려면 반드시 견고한 테스트가 뒷받침하고 있어야 한다. 리팩토링의 첫 번째 단계가 프로덕션 코드에 대한 테스트 코드를 만드는 것인 만큼 두 주제를 같이 학습할 것을 추천한다. 이 두 주제를 학습하는 단계는 다음과 같이 할 수 있다. · 먼저 "테스트 주도 개발: 고품질 쾌속개발을 위한 TDD 실천법과 도구" 책의 1장 공개 자료인 https://goo.gl/2ny56W를 통해 TDD가 무엇인지, 등장 배경은 무엇이며, 어떤 효과가 있는지 검통해 본다. 이 문서를 읽고 실.. 2025. 1. 12. 2.4.4.6 문자열 계산기에 음수를 전달하는 경우 RuntimeException 예외를 throw 한다 HINT) 구글에서 "junit4 expected exception" 으로 검색해 해결책을 찾는다. public class StringCalculatorTest { ... @Test(expected = RuntimeException.class) public void add_ne() throws Exception { assertEquals(6, cal.add("//;\n1;2;3")); }}JUnit에서 기대하는 결과 값이 예외(Exception)인 경우 @Test 어노테이션의 expected 속성에 기대하는 Exception 클래스를 전달할 수 있다. import java.util.regex.Matcher;import java.util.regex.Pattern;publi.. 2025. 1. 11. 2.4.4.5 문자 사이에 커스텀 구분자를 지정할 수 있다 HINT)Matcher m = Pattern.compile("//(.)\n(.*)").matcher(text);if (m.find()) { String customDelimeter = m.group(1); String[] tokens = m.group(2).split(customDelimeter);} public class StringCalculatorTest { ... @Test public void add_custom_구분자() throws Exception { assertEquals(6, cal.add("//;\n1;2;3")); }} import java.util.regex.Matcher;import java.util.regex.Pattern;publi.. 2025. 1. 10. 2.4.4.4 구분자를 쉼표(,) 이외에 콜론을 사용할 수 있다 HINT)String[] tokens = text.split(",|:"); public class StringCalculatorTest { ... @Test public void add_쉼표_또는_콜론_구분자() throws Exception { assertEquals(6, cal.add("1,2:3")); }} public class StringCalculator { public int add(String text) { if (isBlank(text)) { return 0; } return sum(toInts(split(text))); } private boolean isBlank(.. 2025. 1. 9. 2.4.4.3 숫자 두개를 쉼표(,) 구분자로 입력할 경우 두 숫자의 합을 반환한다 HINT)String[] numbers = text.split(","); public class StringCalculatorTest { ... @Test public void add_쉼표구분자() throws Exception { assertEquals(3, cal.add("1,2")); }} public class StringCalculator { public int add(String text) { if (text == null || text.isEmpty()) { return 0; } if (text.contains(",")) { String[] values = tex.. 2025. 1. 8. 2.4.4.2 숫자 하나를 문자열로 입력할 경우 해당 숫자를 반환한다 HINT)int number = Integer.parseInt(text); public class StringCalculatorTest { ... @Test public void add_숫자하나() throws Exception { assertEquals(0, cal.add("1")); }} public class StringCalculator { public int add(String text) { if (text == null || text.isEmpty()) { return 0; } return Integer.parseInt(text); }}두 번째 요구사항에 대한 구현 후에도 복잡도가 낮아 특별히.. 2025. 1. 7. 2.4.4.1 빈 문자열 또는 null 값을 입력할 경우 0을 반환해야 한다 HINT)if (test == null) {}if (text.isEmpty()) {} import static org.junit.Assert.*import org.junit.Before;import org.junit.Test;public class StringCalculatorTest { private StringCalculator cal; @Before public void setup() { cal = new StringCalculator(); } @Test public void add_null_또는_빈문자() { assertEquals(0, cal.add(null)); assertEquals(0, cal.add("")); }}.. 2025. 1. 7. 2.4.3 동영상을 활용한 학습 이 절에서 다루는 문자열 계산기 구현 과정 및 리팩토링 과정은 다음 3개의 동영상을 통해서도 학습할 수 있다. 이론적인 부분은 책에서도 다루지만, 책으로 전달하기 힘든 리팩토링 과정을 볼 수 있기 때문에 동영상 학습도 추천한다. 문자열 계산기 구현 및 리팩토링 1단계 : https://www.youtube.com/watch?v=08YYZ0acYNE 문자열 계산기 구현 및 리팩토링 2단계 : https://www.youtube.com/watch?v=AAMap-pXXN4 문자열 계산기 구현 및 리팩토링 3단계 : https://www.youtube.com/watch?v=weE5PVX9D60참고도서 : https://roadbook.co.kr/169 [신간안내] 자바 웹 프로그래밍 Next Step● 저자.. 2025. 1. 6. 이전 1 ··· 6 7 8 9 10 11 12 ··· 49 다음