[우아한테크코스 7기 프리코스] 1주차 회고 🚀

Seaniiio·2024년 10월 22일
1

우아한테크코스

목록 보기
1/6

우테코 7기 프리코스 1주차 - 문자열 덧셈 계산기

일주일이라는 시간이 굉장히 빠르게 지나갔네요.

프리코스 시작 전에는 자바에 대한 자신감이 없어서, 프리코스 미션 구현 자체를 못하면 어떡하지.. 라는 걱정이 들었습니다. 그래서 화요일 3시에 첫 미션이 열렸을 때 설렘 반 걱정 반으로 확인했고, 다행히도 "어떻게든 구현해낼 수는 있겠다"라는 생각이 들었습니다.

놓치는 것이 생겨 코드를 갈아엎는 대참사를 방지하기 위해 요구사항을 반복해서 꼼꼼히 읽고 나서 설계를 해보기 시작했습니다.

📍 문제 요구 사항

입력한 문자열에서 숫자를 추출하여 더하는 계산기를 구현한다.

  • 쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환한다.
    • 예: "" => 0, "1,2" => 3, "1,2,3" => 6, "1,2:3" => 6
  • 앞의 기본 구분자(쉼표, 콜론) 외에 커스텀 구분자를 지정할 수 있다. 커스텀 구분자는 문자열 앞부분의 "//"와 "\n" 사이에 위치하는 문자를 커스텀 구분자로 사용한다.
    • 예를 들어 "//;\n1;2;3"과 같이 값을 입력할 경우 커스텀 구분자는 세미콜론(;)이며, 결과 값은 6이 반환되어야 한다.
  • 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시킨 후 애플리케이션은 종료되어야 한다.

입력

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

출력

덧셈 결과
결과 : 6
실행 결과 예시
덧셈할 문자열을 입력해 주세요.
1,2:3
결과 : 6

📍 설계 과정


(코드 짜다가 바뀐 부분이 많지만,, )

주요 기능은 "구분자를 나누는 기능(분석)", "피연산자를 나누는 기능(구분)", "계산 기능(계산)"으로 파악했습니다.

절차지향으로 코드를 쭉 서술해도 되지만, 이번 미션에서는 명확하게 역할을 나눌 수 있다고 생각하여 객체지향이라는 특성을 살려보고자 했습니다.

코드를 작성하기 위해 일단 필요한 지식이 무엇인지 파악했고, 더 고민해야 할 부분들을 정리했습니다. 책임 분리에 대해 고민하다 보니 자연스럽게 디자인 패턴인 MVC 패턴을 적용하게 되었습니다.

📍 배운점

이번 미션에서 제가 가장 고민한 부분은 객체지향 설계와 MVC 패턴의 도입입니다. 이 과정에서 제가 느낀 객체지향과 MVC 패턴의 장점은 다음과 같습니다.

1. 명확히 보인다.

상수에 대한 것은 constant에서, 저장된 피연산자들을 이용하여 특정 연산을 하는 것은 model에서, 검증하는 부분은 validator에서 기능한다는 것이 명확하기 때문에, 어떤 기능을 추가해야 할 때 어디에 작성해야 할지, 어떤 코드를 수정했을 때 어느 부분도 함께 수정해야 할지가 명확히 보였습니다.

이 코드를 문자열 뺄셈 계산기로, 다양한 type 계산기로 발전시켜야 한다 해도, 수정할 부분과 추가할 부분이 명확히 보이기 때문에 현재 코드 체계를 유지하면서 확장시킬 수 있겠다고 생각했습니다.

2. 유지보수가 용이하다.

처음 설계할 때는 service 패키지에 StringSplit, StringCalculate이라는 두 클래스를 만들어서, 구분자를 분리하는 클래스와 계산하는 클래스를 나눴습니다.

이후 이 둘의 경계가 모호하다는 생각이 들었고, 기존 두 클래스를 하나의 클래스로 합치게 되었습니다. 하지만 설계에 의하면 service에 의존하는 클래스는 오직 controllerCalculatorOperation 클래스뿐이었고, 해당 클래스에서 StringSplit으로 선언된 부분을 StringCalculate로 바꾸니 모든 수정이 끝났습니다.

추가로, model도 구분자에 대한 Delimiter, 피연산자와 계산 결과에 대한 Calculator로 나눴었지만 추후 Calculator로 합치게 되었고, model에 의존하는 service의 코드만 수정하였습니다.

지금은 비교적 적은 양의 기능을 수행하는 코드이지만, 추후 규모가 큰 코드를 다룰 때는 이러한 책임 분리로 얻을 수 있는 장점이 크게 평가할 수 있다고 생각합니다.

📍 성찰

1. 자바 기본기

미션 제출이 마감되고, 코드 리뷰를 시작했습니다. 디스코드에 글을 올려서 10분의 코드를 구경했는데 나는 정말 애송이구나! 가장 중요한 자바 기본기가 너무나 부족하다 를 느꼈습니다. 결국...

리뷰를 마친 새벽 5시에 자바 기본서를 주문했습니다. 확실히 알지 못한다고 생각하는 부분부터 차근차근 읽어보려 합니다!

2. 겸손을 잃지 말자

6일동안 제 코드만 보다보니, 오..좀 괜찮은 것 같은데? 하며 자만하게 되었고, 어느정도 코드를 완성했다고 생각이 든 이후에는 코드에 전혀 손을 대지 않았습니다. 그런데 제출 이후 다른 분들의 코드를 구경하다보니, 자연스럽게 겸손을 되찾을 수 있었습니다.

나 혼자 고민한 6일보다, 피드백을 받고 다른 사람들의 문제 해결 과정을 구경하는 하루동안 더 많은 성장을 했다고 느꼈습니다.

코드 리뷰를 하지 않았다면 깨닫지 못하고 넘어갔을 부분이라고 생각합니다. 이후 미션이 끝날 때마다 적어도 하루는 코드 리뷰와 회고에 시간을 쏟으려 합니다!

리뷰를 통해 얻은 피드백은 다음과 같습니다.

  • 상수를 풀로 관리하는 것보다 클래스에 소속시키는 것에 대해 고민해보자
  • ArrayList<> 말고, 추상 타입인 List<>를 사용해보자
  • 기능 구현 목록에서 메소드와 클래스 이름은 제외하고 기능 위주로 작성하자
  • 상수 네이밍을 더욱 신경쓰자(구체적으로 작성)
  • 들여쓰기를 신경쓰자
  • 자바에서 제공하는 메서드를 잘 활용하자
  • String끼리의 연산을 지양하자
  • 에러 메시지는 상수화하지 말고 직접 작성하자
  • 멤버 변수를 사용하는 것에 대해 고민해보자
  • 상수화에 대해 더욱 고민해보자. 상수로 선언 안 하는게 더 직관적일 때도 있다.

피드백 얻은 부분에 대해 열심히 고민하고, 이후 미션에 적용해 볼 것입니다!

📍 마무리

프리코스로 인해 1주일이 빠르게 지났는데, 앞으로 남은 3주동안에도 더 성장할 수 있을 것 같아서 아주 기대됩니다. 새로운 미션이 공개됐는데, 다음 주 화요일에 아쉬움을 느끼지 않도록 열심히 달려봐야겠습니다! 🏃

0개의 댓글

관련 채용 정보