우아한 테크 코스

[백엔드]우아한 테크 코스 6기 프리코스 1주차 회고록

Choony 2023. 10. 25. 15:52

평소에 우테코를 하고싶다는 생각만을 가지고 살았던것 같다.

어느 날 6기 모집글을 보게 되었고 급발진에 가깝게 지원하게 되었으며 4주간 회고록겸 성장일기를 써보도록 하겠다.

 

프리코스

지난 기수인가부터 지원자 모두가 4주간 프리코스를 경험해볼 수 있게 바뀌었다. 이는 '좋은 개발자'를 많이 양성하기 위한 우테코의 취지에 맞추어 변경한 것이라고 한다. 확실히 지난 기수들의 회고록을 보다보면 최종 합격을 했던 하지 못했던 공통적으로 프리코스 기간은 큰 도움이 되었다고 한다. 나도 4주간 치열하게 살아가며 스스로의 성장을 도모해보겠다.

 

이번 프리코스에서 커뮤니티는 '디스코드'를 활용한다. 

아름답지 아니한가....

모두가 경쟁자지만 서로 배움을 추구하고 배운게 있다면 나누고자하는 모습이다. 내가 정말 추구하던 개발자의 모습이다. 

'함께-나누기' 카테고리에 좋은 글들이 넘쳐 흐른다. 제일 기억에 남는것은 'Java 17의 특징'이다. (좋은 글 써주셔서 너무 감사합니다. 😊) 

나도 눈팅만 할게 아니라 앞으로 4주간 도움 되는 글을 하나라도 작성해 보겠다!!

 

숫자야구

이번 1주차의 미션이다. 지난 기수의 프리코스 문제들을 봤다면 똑같은 문제가 나왔다는 것을 알 수 있다. 

머릿속에 순간적으로 '이거 완전 개꿀인데?' 이 생각이 들었지만 1초만에 정신차렸다. (나 여기 성장하러 왔어...🫠)

이러한 취지로 지난 기수들의 코드는 참고하지 않고 나 스스로 풀어보기로 했다. 

 

문제 자체는 난이도가 쉬운 편이었다. 우테코 측에서도 1주차인 만큼 평이한 난이도가 쉬울것이라고 말해주었다.

문제의 난이도가 쉽다보니 이틀간 짬내서 설계와 구현을 모두 마쳤다. 물론 이땐 돌아가는 쓰레기 프로그램을 만든게 다다.

 

아! 이 회고록에선 문제 해설 자체는 하지 않을 예정이며 내가 배운것에 대해서 서술할 예정이다. 또한 코드리뷰를 진행하며 배운것도 추후 추가할것이다.

 

MVC패턴

나는 1주차 문제인 숫자야구부터 MVC패턴을 적용하여 문제를 풀어나고자 했다.

평소 스프링부트를 통해 개발을 할 때 습관적으로 MVC패턴을 적용하여 개발을 하곤 했는데 정확히 알지 못하고 사용한거 같아서 잘 정리된 테코톡을 참고하여 학습했다!! 

https://youtu.be/ogaXW6KPc8I?si=VlFxQTKr2yOsI6BW

디렉터리 구조는 이런 식으로 구성하였다. 

 

여기서 살짝 아쉬운건 Model에 Number와 Numbers를 추가 생성하여 일급콜렉션을 적용했으면 어떨까에 대한 아쉬움이 남아있다.! 

또한 나는 

이런 식으로 view단에서 값에 대한 유효성 검사를 진행하였는데 Number라는 모델이 있었다면 그 모델 안에서 값을 검증하는건 어땠을까 고민을 해봤지만 아직 확실히 답을 모르겠다..

 

MVC에서 View의 책임이 '보여주는것'만 있다고 생각한다면 값에 대한 유효성 검사는 다른 곳에서 하는게 좋아보이긴 한다.

근데 또 Controller로 넘겨줄때 정상적인 값을 보내주고 싶은 욕심도 있고,,, 정답이 뭔지 모르겠으니 알려주세요 🥲

 

그리고 문제를 풀 때 그림을 그려서 프로그램의 전체적인 구조를 먼저 파악하려고 했다. 

람다와 스트림

현재 우테코가 Java17로 진행되고 있는데 Java8에서 나온 람다와 스트림에 대해서도 제대로 몰랐다니 좀 부끄러웠다.

코드도 리팩토링 할 겸 스트림과 람다를 적용해볼 수 있는 곳에 적용하는 연습을 해보았다!

 

stream과 filter를 이용하여 같은 수가 몇개인지 비교하는 메서드
스트라이크의 개수를 리턴해주는 메서드

처음에는 반복문을 통해서 같은 값이 몇개인지 비교했었던거 같다. 하지만 stream을 공부해보니 filter라는 아주 좋은 기능이 있었고 이를 이용하여 리팩토링을 진행하였다.

 

map을 이용하여 형변환(Integer->String)을 해주고 List로 리턴해주는 메서드

또한 stream의 map을 이용하여 Integer였던 값을 가져와 String으로 바꿔주었고 toList를 이용하여 최종적으로 List<String>으로 리턴해주었다.

 

이정도로 적용을 해보았고 2주차에선 꼭!! 람다도 사용해보고 stream의 distinct()나 sorted()를 사용해보겠다.

 

단위 테스트

이 또한 부끄러운 얘기지만 나는 제대로된 테스트를 해본적이 없다. 물론 테스트의 중요성은 알고 있었지만 테스트보단 개발이 좀 더 재밌어서 못본척하고 개발만 계속 해나갔었다.. 이러한 나쁜 버릇을 버리고자 우테코에서는 테스트코드를 열심히 작성해  봐야겠다.

 

Junit5와 AssertJ를 이용하여 테스트코드를 작성해보았다.

재시작시 입력받는 1 또는 2 외에 다른 수가 들어왔을 경우에 대한 테스트코드이다. 

String 배열에 테스트 할 값들을 넣어놓고 반복문을 통해서 각 케이스에 대해 테스트했다.

 

근데 코드리뷰를 진행하던 도중 

이런 리뷰를 받게되었다..!! 애너테이션을 통해서 테스트할 케이스들을 관리하니 훨씬 코드가 깔끔해졌다..!! 

2주차 미션에선 꼭 @ParameterizedTest와 @ValueSource 기억!!!! 꼭 적용해볼거다.

 

저에게 이런 지식을 알려주신 JaeHongDev님 감사합니다 👍

자바 컨벤션

1주차 요구사항 중에 Java 코드 컨벤션을 준수하여 프로그래밍 하라는 사항이 있다. 

자바의 코드 컨벤션 규칙이 무려 9개나 되다니... 이걸 어떻게 다 지키면서 코딩하지 이러고 멍때리고 있었다.

그렇게 일단 코드 구현에 중점을 두고 코드를 다 구현한 후에 리팩토링을 하면서 자바 컨벤션을 지키도록 노력하였다. 

convert쪽 메서드들은 초기에 모두 하나의 메서드안에 속해있었는데 메서드 하나에서 여러가지 일을 하는거 같아서 딱 하나의 일만 할 수 있게 분리해주었다. ( 메서드명에 자료형 자체를 두는것은 위험하다고 하니 다음엔 메서드 명을 더 생각해 봐야겠다. )

 

리팩토링을 계속 진행해 나가면서 하나의 메서드가 가지는 코드 줄수가 점점 줄어들고 가독성이 증가한다는걸 체감할 수 있었다. 역시 자바 코드 컨벤션이 괜히 있는게 아니었다. 이 컨벤션을 모두 지키면 가독성이 증가할 뿐 아니라 객체지향적인 코드에 더욱 가까워질 수 있는 지름길이라고 느껴진다.

 

 

 

 

 

이 외에도 배운게 많지만 2주차를 얼른 해야하기에 잠시 덮어두겠다...