inblog logo
|
LifeLog, DevLog
    TIL

    TIL 20251204~05

    KYJTHEYJ's avatar
    KYJTHEYJ
    Dec 05, 2025
    TIL 20251204~05
    Contents
    계산기 만들기 V2어려웠던 점20251215 FeedBack

    계산기 만들기 V2

    • 사전캠프에선 한 클래스 전체에 구현하는 방식으로 구현

    • 이번엔 Step 총 3개로 구성되어

      • main 클래스 하나에 전체 구현

      • 클래스 분리하여 인스턴스 생성하여 구현

      • 2번째 + 제네릭 + 람다 + 스트림 + 에러 처리 등 까지 구현

      • 추가로 README.md 작성

    이렇게 3개의 스텝을 밟아나가면서 고도화 하는 형식으로 진행


    어려웠던 점

    • Generic 활용

      • 사용하라면 그냥 사용할 수는 있으나 정말 한줄 주고 올바르게 작성하라면
        꽤나 처음에 클래스 구조나 메서드 설계를 처음부터 잘 해야함

      • 실제로 값을 입력받아 계산기를 출력할 때

        입력 받는 부분을 제네릭 클래스 내부에서 어떻게든 처리하려 했으나

        내부에서 받은 값을 내부에서 어떻게 형 변환을 하려면 리턴 타입에
        대한 힌트를 받아야 할텐데 그러면 제네릭이 희석되지 않나 싶었음

      • 위의 현상을 어떻게 할까 하다가 Step3 진행할 때는 기능 분리를 했음

      • 사실 방법이야 있어보이지만.. 아직 내 지식으로는 힘듬..


    20251215 FeedBack

    • 생각보다 BigDecimal을 부동소수점 오차만 생각했는데 좋은 메서드가 많다

      • BigDecimal.stripTrailingZeros(); → 불필요한 0 자리수 제거

      • 1/3 같은 자릿수 표현 애매한 것도 scale 처리로 정책 명시하여 더 정확히 가능

      • 후속으로 모든 값을 받겠다고 사칙연산 전체에
        Number 타입을 제네릭 타입으로 받고, doubleValue() 처리를 했는데
        정확하게 나누기 관련하여 .compareTo(BigDecimal.ZERO) == 0
        같은 경우 오차 관련 에러를 방지할 수 있는 것 같다
        ex) (-0.0, 0.0000…001) 같은 정말 작거나 하는 경우

    • 조건 명시하여 수식의 결과값 히스토리에서
      해당 조건보다 큰, 작은, 커스텀 조건으로 찾게하는 기능을 만들었는데,
      이게 결과값 구분은 불러온 히스토리에서 “=” 기준 split 을 쳤었다

      • 결과값 조건 명시 (무조건 = 포함) 가 코드 결과상 벗어나지 않아서 한건데
        알려주신 대로 정확하게 히스토리 저장도 인스턴스화 하는게 맞다
        (지금처럼 풀 수식, 결과값 따로) 같은 형식으로..

    • Enum 클래스의 용도에 관하여

      • 사실 처음 과제 시작부터 Enum 에 모든 수식의 진행까지도
        반영하려 했었는데.. (제출 시점엔 부호 유효성 체크 기능까지만 있었다)
        필수, 선택과제의 구분이 명확해야했기에 Enum 을 활용하지 않았다

      • 그런데 이미 진행한 내역을 갖고 다시 Enum에 넣으려하니 개인적으로
        했던 걸 또 고쳐서 또 넣는 과정 부터 꼬이기 시작했다

      • 전략 패턴 같은 걸 좀 더 계획해서 분리했어야 했는데..

    Share article
    Contents
    계산기 만들기 V2어려웠던 점20251215 FeedBack

    LifeLog, DevLog - https://github.com/KYJTHEYJ

    RSS·Powered by Inblog