본문 바로가기

전체 글434

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.
2.2.3 테스트 중복 코드 제거 개발자가 가져야 할 좋은 습관 중 하나는 중복 코드 제거인데, 중복 코드는 프로그래밍의 가장 큰 적 중의 하나이다. 테스트 코드 또한 많은 중복이 발생한다. CalculatorTest 클래스에 Calculator 인스턴스를 생성하는 부분에 발생하는 중복을 제거한다. import static org.junit.Assert.assertEquals;import.org.junit.Test;public class CalculatorTest { private Calculator cal = new Calculator(); @Test public void add() { assertEquals(9, cal.add(6, 3)); } @Test public void subtra.. 2025. 1. 1.
2024년 회고 2번의 금융 프로젝트와 이직 1. 2번의 금융 프로젝트 2024년의 시작은 상암에서의 2번째 프로젝트였다. 금융권 답게 짧은 프로젝트 기간에 많은 개발 건들을 작업해 나갔다. 고도화 프로젝트 답게, 새로운 표준 프레임워크와 리액트, 클립리포트를 적용하는 시간이었다. 클립리포트는 처음이 아니라서 적응하는데 오랜 시간이 걸리지 않았다. 프로그램 API와 배치 개발을 마무리하고 고객 요구사항 반영과 결함을 조치하니 어느덧 5월이 되어 계약 만료로 철수하게 되었다. 현업 개발자가 상주하며 많은 도움을 주어서 감사했다. 6월엔 강남에서 새로운 금융업무와 솔루션을 경험하는 '특별한' 프로젝트로 들어가게 되었다. 여기서 특별한 이유는, 기존과는 달리 솔루션을 커스터마이징하고 특정 금융 업무에 대한 프로그램을 작업했기.. 2024. 12. 31.
타입스크립트 템플릿 소개 1. 타입스크립트 템플릿 타입스크립트로 리액트 프로젝트를 시작할 때 가장 빠르게 시작할 수 있는 도구를 소개한다. Create React App 의 공식문서 페이지에서 확인할 수 있다. 참고링크 : https://create-react-app.dev/docs/adding-typescript Adding TypeScript | Create React AppNote: this feature is available with react-scripts@2.1.0 and higher.create-react-app.dev 리액트 앱을 템플릿으로 만들고 어떻게 구동되는지 살펴본다.section-final 폴더를 생성한 뒤, 타입스크립트 템플릿을 갖는 리액트 앱을 설치한다.터미널에서 'npx create-react-ap.. 2024. 12. 30.