본문 바로가기

교재 실습/자바 웹 프로그래밍 Next Step95

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.
2.4.2 모든 단계의 끝은 리팩토링 소스코드의 복잡도가 쉽게 증가하는 이유는 하나의 요구사항을 완료한 후 리팩토링을 하지 않은 상태에서 다음 단계로 넘어가기 때문이다. 각 단계에서 다음 단계로 넘어가기 위한 작업의 끝은 기대하는 결과를 확인한 후 리팩토링까지 완료했을 때이다. 예를 들어 문자열 계산기를 구현할 때 null 또는 "" => 0에 대한 구현 완료 후 "1" => 1로 넘어가기 전에 리팩토링할 부분이 있는지 찾아보고 있다면 진행해야 한다.즉, 지금까지의 과정이 "구현 => 테스트를 통한 결과 확인"으로 끝났다면 이 절에서는 "구현 => 테스트를 통한 결과 확인 => 리팩토링" 과정으로 진행함으로써 리팩토링 방법과 효과에 대해 살펴보도록 한다.참고도서 : https://roadbook.co.kr/169 [신간안내] 자바 웹 프로그.. 2025. 1. 6.
2.4.1 요구사항을 작은 단위로 나누기 복잡한 문제를 풀어가기 위한 첫 번째 작업은 작은 단위로 나눠 좀 더 쉬운 문제로 만드는 것이다. 문자열 계산기의 요구사항을 더 작은 단위로 나눠 구현 가능한 상태로 만드는 작업이 정말 중요하다. 이 부분만 잘 정의되어도 문제를 예상보다 쉽게 해결할 수 있다. 하지만 이 부분을 정의하는 것이 쉽지 않기 때문에, 다양한 문제를 해결해 봄으로써 끊임없는 연습이 필요하다.참고도서 : https://roadbook.co.kr/169 [신간안내] 자바 웹 프로그래밍 Next Step● 저자: 박재성 ● 페이지: 480 ● 판형: 사륙배변형(172*225) ● 도수: 1도 ● 정가: 30,000원 ● 발행일: 2016년 9월 19일 ● ISBN: 978-89-97924-24-0 93000 [강컴] [교보] [반디].. 2025. 1. 5.
2.4 테스트와 리팩토링을 통한 문자열 계산기 구현 문자열 계산기를 테스트 코드를 기반으로 리팩토링하는 과정에 대해 살펴본다.문자열 계산기의 요구사항은 현장에서 요구하는 소프트웨어 요구사항의 복잡도에 비하면 상당히 단순하다. 단순한 요구사항임에도 불구하고 소스코드의 복잡도가 증가했을 것이다. 따라서 새로운 요구사항을 추가 구현하기도 쉽지 않고, 테스트가 깨질경우 디버깅하기도 쉽지 않았을 것이다.이와 같이 복잡도가 쉽게 증가하는 원인은 요구사항의 복잡도가 높은 것이 가장 큰 원인이다. 때문에 복잡도를 낮출 수 있는 방법을 찾아야 한다. 그 방법 중의 하나가 끊임없는 리팩토링을 통해 소스코드를 깔끔하게 구현하는 연습을 하는 것이다. 문자열 계산기를 리팩토링을 통해 개선해본다.참고도서 : https://roadbook.co.kr/169 [신간안내] 자바 웹 프.. 2025. 1. 5.
2.3.3 추가 요구사항 요구사항을 만족하는 코드를 구현했다고 개발이 완료된 것이 아니다. 소스코드 구현 후 반드시 중복을 제거하고, 읽기 좋은 코드 구현을 위해 구조를 변경하는 리팩토링이다.리팩토링이란 소스코드의 가독성을 높이고 유지보수를 편하게 하기 위해 소스코드의 구조를 변경하는 것을 의미한다. 리팩토링을 하더라도 기능상의 결과가 변경되는 것은 아니다. 리팩토링 작업 이전과 똑같은 기능을 해야 한다.다음 요구사항에 맞춰 리팩토링을 진행한다. · 메서드가 한 가지 책임만 가지도록 구현한다. · 인덴트(indent, 들여쓰기) 깊이를 1단계로 유지한다. 인덴트는 while 문과 if 문을 사용할 경우 깊이가 1씩 증가한다. 예를 들어 다음 소스코드의 깊이는 2이다. void someMethod() { while (true.. 2025. 1. 4.
2.3.2 요구사항 분리 및 각 단계별 힌트 프로덕션 코드를 구현할 StringCalculator 클래스와 테스트 코드를 구현할 StringCalculatorTest 클래스를 생성한다. 테스트 클래스 이름은 프로덕션 클래스 이름에 Test 접미사를 붙이는 것이 관례이다. 프로덕션 코드와 테스트 코드를 구현하기 위해 클래스를 분리할 뿐만 아니라 최초 소스코드를 관리하는 디렉토리까지 분리한다. StringCalculator 클래스는 다음과 같은 메서드 구조를 가질 것이다. public class StringCalculator{ int add(String text) { return 0; }} 이 실습을 진행해보면 각 요구사항 별로 다른 메서드를 생성해 구현하는 경우를 종종 본다. 프로덕션 클래스의 메서드를 여러 개 생성하는 것이 .. 2025. 1. 3.
2.3.1 요구사항 문자열 계산기의 요구사항은 전달하는 문자를 구분자로 분리한 후 각 숫자의 합을 구해 반환해야 한다. · 쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환한다.(예 " " => 0, "1,2" => 3, "1,2,3" => 6, "1,2:3" => 6) · 앞의 기본 구분자(쉼표, 콜론) 외에 커스텀 구분자를 지정할 수 있다. 커스텀 구분자는 문자열 앞부분의 "//"와 "\n" 사이에 위치하는 문자를 커스텀 구분자로 사용한다. 예를 들어 "//;\n1;2;3"과 같이 값을 입력할 경우 커스텀 구분자는 세미콜론(;)이며, 결과 값은 6이 반환되어야 한다. · 문자열 계산기에 음수를 전달하는 경우 RuntimeException으로 예외 처리해야 .. 2025. 1. 2.