주노 님의 블로그

20240729 본캠프 11일차 TIL 본문

TIL

20240729 본캠프 11일차 TIL

juno0432 2024. 7. 29. 22:21

본캠프 11일차 내용 간단요약

  • 09:00 ~ 10:00 : 코드카타
  • 11:00 ~ 12:00 : 개인 과제
    LV2 과제 개선
  • 12:00 ~ 13:00 : 점심시간
  • 13:00 ~ 15:00 : 개인 과제
    LV3 - 1 공부 및 구현
  • 15:00 ~ 16:00 : 개인과제
    LV3 - 2 공부 및 구현
  • 16:00 ~ 17:30 : 팀원 회의
  • 18:00 ~ 19:00 : 저녁시간
  • 19:00 ~ 21:00 : 개인과제
    LV3 - 2 공부 및 구현

오늘 해야할 일✔️🔺

✔️  스프링 강의 끝내기

🔺 과제 3

 


개인과제

더보기

과제 3-1

 평소에 Enum타입을 딱 한번밖에 써보지 않아서

 인터넷이랑 강의를 엄청 뒤졌다

 

package calculator;

//과제 3-1 enum타입
//기본적으로 열거형 값은, 표현의 간결함을 위해 열거형 값만 명시한다.
public enum OperatorType {
    ADD(0,0,'+'),
    SUBTRACT(0,0,'-'),
    MULTIPLY(0,0,'*'),
    DIVIDE(0,0,'/'),
    MOD(0,0,'%');

    private char operator;
    private double num1;
    private double num2;

    OperatorType(double num1 , double num2, char operator) {
        this.num1 = num1;
        this.num2 = num2;
        this.operator = operator;
    }

    public void setNum1(double num1) {
        this.num1 = num1;
    }
    public void setNum2(double num2) {
        this.num2 = num2;
    }

}

 

이렇게 작성하려고 했지만

 다른 oprator 클래스의 역할이 사라진다

그리고 enum타입에 과도하게 몰린것 같았다

 

public enum OperatorType {
    ADD('+'),
    SUBTRACT('-'),
    MULTIPLY('*'),
    DIVIDE('/'),
    MOD('%');

    private char operator;

    OperatorType(char op) {
        this.operator = op;
    }

}

 

그래서 간략하게 수정을 하였다

 

operation type도 enum을 받아서 사용하기로 교체했다

 

그러고보니 값을 받을때는 char, 입력을 원하는 값은 OperatorType로 변환해줘야한다

 

 

 여러 자료를 참고하다가

OPERATOR를 찾기위해서

stream을 이용하면 되겠다 싶었다

 

public static OperatorType checkOperator(char op) {
    return Arrays.stream(values()).filter(x -> x.operator == op).findFirst().orElse(null);
}

 stream을 사용해서 해당 operator를 찾는다

 

 

Cannot invoke "calculator.OperatorType.ordinal()" because "operator" is null

에러처리가 다르게 뜨는걸 봐서는 stream에서 null로 지정한 오류가뜨는것 같았다

stream은 optional객체를 반환해주니까 에러도 저렇게 뜨는걸로 판단된다.

 

 

 참고자료

https://javacatcher.tistory.com/119

 

미션2. 로또 - TDD 회고

본격적으로 TDD 기반으로 테스트 코드를 작성했다. 도메인 설계 기본기가 부족하니 객체에 대한 책임을 분리하는 게 어려웠다. 처음에는 프로덕션 코드보다 테스트 코드를 먼저 짜는 게 이상하

javacatcher.tistory.com

 

 

과제 3-2

아직 구현을 고민중이다. 

제네릭으로 Calculator를 바꾸려면 아래 operator도 바꿔야하는데 생각보다 쉽지않았다

제네릭을 제대로 배우지 못해서 오류가뜨는데 일단 3-3을 먼저 시도하고 제네릭으로 바꾸는 방법을 택했다

 

과제 3-3

//과제 3-3 구현
public List<Double> printValueGreaterThan(double input, List<Double> results) {
    return results.stream()
            .filter(num -> num > input)
            .collect(Collectors.toList());
}

arithmeticCalculator에 위 코드를 구현하였다

지금 입력값 보다 큰 값을 입력받아야하니 List자료형으로 하였고

stream의 필터와 컬렉션으로 반환을 하였다

'TIL' 카테고리의 다른 글

20240731 본캠프 13일차 TIL  (0) 2024.07.31
20240730 본캠프 12일차 TIL  (0) 2024.07.30
20240726 본캠프 10일차 TIL  (0) 2024.07.26
20240725 본캠프 9일차 TIL  (0) 2024.07.25
20240724 본캠프 8일차 TIL  (0) 2024.07.24