티스토리 뷰
목표
- 테스트코드의 습관들이기
- 천천히 하더라도 꼭 완주
- 기존 구성에 따라, 내 힘으로 구현 -> 피드백 확인 -> 리팩토링의 과정을 거친다.
객체지향 생활체조원칙
- 한 메서드에 오직 한 단계의 들여쓰기만 한다.
- else 예약어를 쓰지 않는다.
- 모든 원시 값과 문자열을 포장한다.
- 한 줄에 점을 하나만 찍는다.
- 줄여 쓰지 않는다(축약 금지).
- 모든 엔티티를 작게 유지한다.
- 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
- 일급 컬렉션을 쓴다.
- getter/setter/프로퍼티를 쓰지 않는다.
문제는 혹시나하는 저작권 때문에 공개할 순 없다는 점..
TEST 코드
..test코드
public class StringCalcTest {
@BeforeEach
public void setUp() {
String polynomial = "2 / 2 * 4 - 100 + 207";
System.setIn(new ByteArrayInputStream(polynomial.getBytes()));
}
@Test
@DisplayName("문자열 계산기")
public void stringCalcTest() {
String output = inputString();
String[] values = output.split(" ");
StringCalculator stringCalculator = new StringCalculator(values);
int result = stringCalculator.calculate();
assertThat(result).isEqualTo(111);
}
private String inputString() {
Scanner sc = new Scanner(System.in);
return sc.nextLine();
}}
최초 TDD 구현
..초기 testcode -> 구현만 성공
public class StringCalculator {
private String[] values;
public StringCalculator(String[] values) {
this.values = values;
}
public int calculate() {
return 5;
}}
리팩토링 후 구현
public class StringCalculator {
private String[] values;
public StringCalculator(String[] values) {
this.values = values;
}
/**
* 문자열 계산
* @return int
*/
public int calculate() {
int result = Integer.parseInt(values[0]);
for (int i = 1; i < values.length; i += 2) {
int nextNum = Integer.parseInt(values[i + 1]);
result = switchCalculation(values[i], result, nextNum);
}
return result;
}
/**
* 계산식
* @param value 기호
* @param result 결과
* @param nextNum 뒤에 번호
* @return int
*/
private int switchCalculation(String value, int result, int nextNum) {
switch (value) {
case "+" : return add(result, nextNum);
case "-" : return subtract(result, nextNum);
case "*" : return multiply(result, nextNum);
case "/" : return divide(result, nextNum);
default: throw new RuntimeException("잘못된 기호를 적었습니다.");
}
}
/**
* 덧셈
* @param num 기존 값
* @param plusNum 더할 값
* @return int
*/
private int add(int num, int plusNum) {
return num + plusNum;
}
/**
* 뺄셈
* @param num 기존 값
* @param minusNum 뺄 값
* @return int
*/
private int subtract(int num, int minusNum) {
return num - minusNum;
}
/**
* 곱셈
* @param num 기존 값
* @param multiplyNum 곱할 값
* @return int
*/
private int multiply(int num, int multiplyNum) {
return num * multiplyNum;
}
/**
* 자바 나눗셈
* @param num 기존 값
* @param divideNum 나눌 값
* @return int
*/
private int divide(int num, int divideNum) {
return num / divideNum;
}
}
결과
리팩토링 생각할 부분
switchCalculation의 파라미터가 3개이상인 부분..
'사견 > 노트' 카테고리의 다른 글
좋은 API Response 만들기 리뷰 (1) | 2024.01.23 |
---|---|
MoGreene Code Convention (0) | 2024.01.02 |
2023 리눅스마스터 2급 합격 후기 (0) | 2023.06.30 |
Java 코드컨벤션 (0) | 2023.01.20 |
2022 개발자 로드맵 (0) | 2022.09.07 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- 함께모으기
- for
- 정수형으로 변환
- 스프링부트
- 객체 지도
- 객체지향
- 토스페이먼츠
- pinia
- 책리뷰
- 객체지향의 사실과 오해
- mybatis구현
- springboot
- 맥 error
- Vue.js3
- 타임리프
- 알고리즘
- 한권으로끝내기리눅스마스터2급
- CompositionAPI
- java 플레이그라운드
- it책 리뷰
- JWT
- LEVEL2
- SpringSecurity
- 짝지어제거하기
- 다음 큰 숫자
- vue.js
- script setup
- vuex
- 리눅스마스터2급
- 프로그래머스
- Total
- Today
- Yesterday