우테코 프리코스[BE 7기] 1주차 회고

이성우·2024년 10월 20일
1

문자열 덧셈 계산기

가장 많은 시간을 투자한 부분:

요구사항에 대해 생각하기

기능 요구 사항에 기재되지 않은 내용은 스스로 판단하여 구현한다.

이 부분이 나한테는 엄청 애매했다...
우선 요구사항에 대해 살펴보며 기능목록을 작성했다!

구분자와 양수로 구성된 문자열

양수를 맨 처음 봤을 때 생각난 건,

"아 이건 int로 처리하면 오류난다. 양수니까 int 범위를 넘은 값이 들어올 수도 있으니까 long으로 입력값과 결과값을 처리하자"
라는 생각을 우선적으로 했다.

그렇게 구현을 마치고 테스트 코드를 작성하던 중,
양수가 정확하게 뭐지? 내가 아는 '양의 정수'가 양수가 맞나? 의심이 들었고, 사전적 정의를 찾아봤다.

양수: 양의 부호(+)를 붙인 수로 0보다 큰 수다

이 의미면 소수도 포함되는거 아닌가...?
나아가 무리수도 양수일텐데 무리수 계산까지 구현을 해야하는건가? 많은 생각이 들었다,,,

이런 생각을 하면 끝도 없을 것 같아서
소수까지 계산을 하자! 결론을 내렸다.

미션을 진행하며 느낀 점

1) 요구사항과 관련해서

굉장히 간단한 걸 하나 만들었지만, 대충 만드는 것과 제대로 만드는 것의 차이점이 엄청 컸다.

예시에서는 간단하게 3+2를 예시로 주었지만,
값의 limit이 정해진 게 아니였고, '양수' 라는 조건이 주어졌을 때 생각해야 할 부분이 많았다.

int타입을 사용한다고 했을 때, int의 maxValue를 넘어간다면?
양수는 소수도 포함하는데 소수를 계산한다면?
그렇다면 double 타입을 사용해아하는데, double은 정수끼리의 계산에서 소수점을 출력하는데 이 문제는 어떻게 해결할건지? (ex 3+2 = 5.0)
생각해야 할 부분이 엄청 많아서 간단한 기능을 구현하는거였지만, 내가 어떻게 생각하고 공들이냐에 따라 아예 다른 방향성이 잡힐 수 있다는 것을 크게 느꼈다.

2) 프로그래밍 과정에서 느낀부분

내가 할 수 있는 모든 능력을 다 써서 미션을 구현해보자

미션을 시작하기에 앞서 위의 마음가짐을 갖고 시작했다.

정답인 코드는 없지만, 코드를 더 나은 방향으로 작성하려면 어떻게 해야하지? 계속 생각했고, 미션을 완료하는 시점에 머릿속에는 몇 가지 의문이 남았다.

  • 클래스의 분리는 어디까지?
  • 테스트 코드는 어디까지?
  • void를 지향해야 하는가? return 값을 반환하는게 좋은 코드인가?

라는 의문점이 들었고, 프리코스 커뮤니티를 통해 사람들과 토론을 하며 하루 빨리 문제에 대해 이야기를 나누고 싶다!!! (빨리 월요일이 왔으면,,, 궁금하다)

사람들과 논의해봐야 할 부분

- 과도한 클래스의 분리

Service, ServiceImpl/ InputView, OutputView

public interface CalculatorService {

    List<String> findValidNumber(String userInput);
}

나의 서비스 인터페이스에는 하나의 메서드만 존재한다.
(기능이 적기 때문에)

이런 경우에도 interface를 사용해 구현체를 분리해야할까?

메서드가 하나밖에 없는데 과도하게 클래스를 분리하는거 아닐까?

또한 이번 미션에서는 입력문, 출력문이 하나씩 존재했는데, 이걸 굳이 InputView, OutputView로 나눠야할까?
너무 과도하게 분리하는거 아닌가?

- void를 지향해야하는가? return 값을 반환하는게 좋은 코드인가?

public double calculatePlusNumber(List<String> numbers){
        for(String num : numbers){
            validator(num);
            result += Double.parseDouble(num);
        }
        return result;
    }

Calculator 안의 메서드다.

계산하는 로직인데, 이걸 void로 사용하고, getter()를 하나 만들어서 result 값을 가져오는게 좋을까?
아니면 계산을 한 후에 바로 result 값을 return 하는게 좋을까?

- 테스트 코드는 어디까지?

결과 출력문은 눈에 보이는건데 이것도 test 코드를 작성해야 하는걸까?

이번 미션을 통해 배운 부분

- 공식문서 참고하기

이전에는 gpt 해줘! 라는 방법을 사용했었지만,
이번 프리코스에서의 목표를 '프로그래밍을 깊이 있게 이해하기' 로 설정했고, 이에 대한 수단으로 '미션 기간동안에는 생성형AI 사용하지 않기' 로 설정했기에 모르는 메서드가 있으면 구글링 혹은 공식문서를 참조할 수 밖에 없었다...!

미션 요구사항을 위해 String을 구분자로 나눴어야했는데,
이 기능을 위해 split() 메서드를 이용했다.

numbers = Arrays.asList(changedUserInput.split(BASIC_DELIMITER + "|" + customDelimiter));

이전까지는 split()으로 하나의 구분자를 사용했었는데,
split() 안에 여러개의 구분자를 넣을 수 있나? 찾아봐야 했기에 공식문서를 참조했다.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/String.html#split(java.lang.String)

(부끄럽지만 공식문서를 처음 들어가봤다,,,)

검색을 통해 쉽게 split() 메서드의 기능을 알 수 있었다. 영어라는 문제점이 있었지만, 나에게는 구글번역기가 있기에 번역하면서 보니 큰 문제는 없었다!

(gpt 안 쓰고 직접 찾으니까 뭔가 근본있는 프로그래머가 된 느낌...? 뿌듯)

물론 split() 메서드에 대한 간단한 정의는 구글링하거나 gpt 물어보면 쉽게 알 수 있지만, 이후에 공식문서를 사용할 일이 분명 많을 것이라 생각해 지금부터 습관을 가지려 한다!!

회고 끝!

https://github.com/CodingMasterLSW/java-calculator-7

profile
이성우

0개의 댓글