우아한 테크 코스 6기 - 프리코스 4주 차
부제 : ㅂ.. 벌써 마지막이라니.. 세상이 날 상대로 속이는거 아니고서야 이럴순없쒀😔
두둔빵 Monday, Tuseday, WTF!! Saturday, Sunday 이 중 T의 의미는 미션 시작일
그 어느때부보다 불안하면서도 두근두근한 목요일이 다가왔다.
미션 발표되기 직전의 이 온도, 습도, 조명,, 그리울거야 ㅎ
아무튼 이번엔 마지막 미션주인만큼 블로그도 실시간으로 작성중이다.
미션 이메일이 잘 도착했으려나 > 사실 이거부터 걱정되고 떨림 혹시 잘못제출했을까ㅂ
왔다앜!!!!!!!!
일단 대충 메일을 보는데 와 생각지도 못한 과제와 과제 제출 방식이 기다리고 있었다.
얼마나 어렵게 내시려고 ㅎㅎ
그리고 서둘러서 미션 과제를 읽어보기로 했다.
.
.
응?
우테코 선생님들 진짜....진짜........기대를 저버리지 않으시네요... 진짜....
과제 시작 전 피드백 타임
과제에 시작하기에 앞서 코드 리뷰와 공통 피드백부터 읽어보기로 했다.
정말 도움이 많이 되는 이야기들이었다. 다음주부턴 이런 피드백을 받아보지 못한다니ㅜㅜ
물론 뼈를 쎄게 후려쳐버리셔서 순살이 되는 피드백도 있었다.
덕분에 3주차 미션에 미련이 넘치다 못해 구질구질해지는 전여친 된 느낌..
그걸 이렇게 할껄, 저렇게 할껄, 아 그거 나 했나? 그거하지말껄 등등
피드백을 몇번이고 읽고 이해하고 공부하며 이번 주 미션엔 정말 완벽히 반영해보리라 다짐했다!
과제 시작
4주차라서 기능 요구 사항이 특별하게 나오기도 했지만 유난히 길게 느껴지는건 기분탓인가요 오오-
기능 요구 사항의 길이에 압도당해 어려워 보이긴했지만 그래도 뭔가 설렘이 있었다.
이유는 단순하다.
내가 사랑하는 ☃️🎄크리스마스🎄☃️ 프로모션 미션이었으니까~~~
크리스마스를 너무너무 좋아하기때문에 소녀, 이 한 몸 다 불사질러 열심히 구현해보겠사옵니다 꺄르르르륵
지금 유튜브 뮤직에 크리스마스 플레이리스트 꽉꽉 채워놨다구여~~
미리메리크리스마스하면서 코딩해야지 꺄핳 😆
일단 아래에 첨부한 pdf를 보면, 피드백을 비롯하여 공부한 내용과 모든 요구 사항을 정리하며 과제의 워밍업을 했다.
혼자 공부하며 정리한거라 간혹 틀린 내용이 있을수도..
잉챠잉챠 공부하고 시작하기,,
뭐 이렇게 까지 공부하고 시작하냐 할 수 있지만 나는 복습 역시 굉장히 중요하다고 생각하기에 모든 주차의 피드백을 다시 공부하면서 모르는 개념이나 설명은 꼭 이해하고 시작해야 직성이 풀린다..(어쩌면 조금 피곤한 성격일수도)
공부를 끝내자마자 목표를 설정하고 요구사항에서 중요한 부분 표시한 것들을 위주로 기능 목록 정리를 시작했다. 항상 리드미를 먼저 적기 때문에 리드미 형식대로 작성하기 시작했다. 어떤 목표를 세우느냐에 따라 성장 속도가 달라진다고 생각하기도 하고 한번 세운 목표를 이루어냈을 때의 성취감도 중독적이라(국가에서 허락한 유일한 마약? 뭐 그런거?) 목표도 함께 세우고 시작한다.
목표는 주로 구현과 관련하여 어떤 걸 위주로 더 신경써서 코딩해보고싶은지를 작성하는 편이다. 혹은 사용해보고싶은 자료구조나 문법들.
이번엔 무언가 알 수 없는 압박감인지 기능 목록 정리부터 막막한 느낌이었다. 해야할 건 알겠는데 뭐 부터 시작해야할지 모르겠는?
기능 목록 정리를 끝내고 바로 개발을 시작했다.
🎙️아..ㅇ..아아...현재 시각 11월 13일 02시 16분 1차 구현 완료
엎치락 뒤치락 하다가 이틀만에 기능적인 면에서 구현을 끝냈다. 클래스와 패키지를 모두 나누어가며 구현을 하려고하니 이번에는 enum을 사용한 클래스도 너무 많고 늘어난 파일의 수 만큼 머릿속이 복잡해져 구현이 더뎌졌다. 로직이 어렵다거나 하는건 아닌데 체감상 구현할 기능도 다양하고 변수들도 다양하고 전체적으로 그냥 다 많아서 클래스를 분리하는 것이 굉장히 어렵게 느껴진 미션이었다.
하지만 구현을 하며 왜 우테코에서 이런 미션을 냈는지도 이해가 갔다. 확실히 지난 주 보다 더 eum이라는 클래스의 용도나 편리성이 느껴졌고, 객체의 분리가 왜 필요한지 느껴졌다. 리팩토링 할 요소들이 너무 많아 한참을 더 머리 아플 예정이지만 클래스 분리의 필요성에 대해 더 고민해보며 리팩토링 하면 분리수거 정도는 한(?) 마냥 굴러가는 쓰레기같은 코드는 아닐것같다.
특히 이번 미션은 예외 상황이 너무 많아 예외 경우를 모두 적어두고 하나씩 넣어보면서 코드를 짰다. 기능을 다 구현하고 나서도 놓친 예외들이 있어, 자꾸 수정을 거듭하다 보니 테스트 코드의 필요성도 체감되기 시작했다. 기능적인 완성도를 높여주기도 하지만 내가 놓친 예외들을 쉽게 확인할 수도 있고, 코드를 바꿀때마다 그 많은 예외들을 일일이 다 입력해보지 않아도 된다는 것..
자세한 내용들은 아래에 작성해둘 것이지만 미션을 거듭할 수록 새로운 지식을 받아들이는 태도가 많이 바뀐다. 지금까지는 이론이 이렇기 때문에 이런식으로 구현해야하고~ 여기서는 이런식으로 구현하는게 클린코드야~ 라고 해서 구현을 해왔다면 이제는 뭔가 존재하는 근본적인 이유에 대해 고민을 하게 되고, 그것을 이해하면서 사용하니깐 실력 성장 속도가 다르다.
근데 왜 리팩토링을 해도 해도 뭔가 부족한 건 확실한데 뭐가 부족한지 모르겠지
🔊 치이이익.....ㅎ..현재 시각...11월 14일 16시 51분 지원 제출 테스트 성공
일단 1차적으로 리팩토링과 테스트 코드 구현까지 끝냈다.
화요일 오후 2시부터 콜라보레이터 승인을 받아주신다고 하셨는데 3시반이 되어가도록 승인이 되지않아 혹시 잘못 초대했는건가 너무나도 걱정이 많았다. 그래서 더 승인 소식이 반가웠다. 승인을 받자마자 소감문은 아직 작성하지 못했지만 제출부터 해보았다.
호옥시나 테스트 통과가 안되면 그거야말로 또 문제니깐 ㅎㅎㅎ
다행이 아래의 과제 결과 사진처럼 통과는 다 되었다. 4주간의 초록불들이여.. 내가 한달 전까지 얼마나 보고싶었는지 아닣ㅎㅎㅎ
테스트는 모두 통과되었지만 리팩토링은 계속된다.
과제 시작 전 목표를 위주로 다시 체크하고 또 체크해야지
📢 현시각 11월 15일 17시 13분 최종 제출 완, 우테코 프리코스 끝
몇번의 리팩토링을 거듭하고도 계속 계속 보게 되는 마성의 코드들이지만 일단 소감문 작성과 함께 제출완료했다!
이렇게 제출하고도 또 코드보다가 냅다 수정할지도 모르지만?
우선 제출 완료~
과제 결과
4주 차 과제 코드는 아래에! (Private으로 되어있어서 볼 순 없겠지만 나중에 풀수도있으니까,,)(오 풀었음)
https://github.com/coenfflOo/java-christmas-6-coenfflOo
GitHub - coenfflOo/java-christmas-6-coenfflOo: 우아한테크코스 프리코스 4주차 미션
우아한테크코스 프리코스 4주차 미션. Contribute to coenfflOo/java-christmas-6-coenfflOo development by creating an account on GitHub.
github.com
이번엔 비공개 지원이라 경쟁률을 알 수 없으니 너무 궁금하고 내가 정말 잘 제출했나 하는 생각에 자꾸 돌아보게되는 것같다.
미련을 가진다고 될 일이 아닌데ㅜㅜ..
살면서 가장 적게 자고 가장 많이 공부했던 한달이었다.
달리기가 잘 되는 날에는 지난 며칠 꾸준히 달려놓은 과거의 내가 밀어주는 것이고 그런 날들이 쌓이면 몸이 마음을 거뜬하게 이끌고 간다고 한다. 하지만 오랜만에 달리는 날에는 몸이 안따라줘도 마음의 힘으로 살살 달래며 데리고 가는 수밖에 없다고 한다.
나에게 프리코스 한 달은 딱 그런날들의 반복이었던 것 같다.
과거의 나의 힘으로 달리기도했다가 지치는 날엔 그날의 나의 마음이 달래주는 나날들의 연속.
결승선을 통과함과 동시에 새로운 출발선을 넘은 나.
뭔가 되게 시원 섭섭하다..
고생했어 나.
수고했고.
뵤오.
(대충 앞으로도 파이팅하자는 뜻)
마지막 소감..!! 소감이 이 글의 끝이 아닙니다. 더 내려가시오.
🎄 소감
한 달이라는 시간이 흘러 벌써 4주차. 마지막 미션을 진행했습니다. 마지막 미션이라는 생각에 더 많이 공부하고 더 확인하고 긴장감을 가지고 임했던 것 같네요ㅎㅎ 마지막인만큼 느낀점도 많고 배운 것도 많아 이 칸에 모두 담아낼 수 없었습니다. 1주차부터 4주차까지의 모든 블로그 회고록들. 소감문을 올리며 다시 돌아보는데 한달동안의 성장일기가 얼마나 제가 많이 컸는지 새삼 느끼게 해주네요.. 자바로 알고리즘 문제만 겨우 풀어본 제가 예외 검증을 하고 재입력까지 받는 프로그램을 구현하여 테스트 코드까지 작성하다니.
사실 졸업이 다가오면서 불안함이 컸습니다. 동기들은 졸업 준비할 때 혼자 뒤늦게 전과를 하고, 유튜브만 보다 시작하게 된 개발 공부가 남들보다 실력이 많이 부족한 것같다는 현실로 다가왔으니깐요. 실력의 격차를 줄이기 위해 노력했으나 항상 아쉬움이 남는건 어쩔 수 없었습니다. 그래서 더 죽기살기로 배울 수 있는 기회를 찾아다녔어요. 요령을 피우지 않고 시간이 걸리더라도 진짜 개발자가 되고 싶었거든요ㅎㅎ 그리고 만난 프리코스에서 합격여부를 떠나 정말 많은것들을 얻었습니다. 더 성장할 수 있는 좋은 기회를 다시 만나면 좋겠네요. 즐거웠고 힘들었고 그럼에도 행복했습니다! 감사합니다:)
☻ 잘한 점 & 배운 점 & 알게 된 점
☃️ 정적 팩토리 메소드는 초면입니다만!
- 코드를 구현할 때마다 객체 생성과 관련하여 코드가 지저분해보이는 것이 고민이었습니다.
- 객체를 생성하고 그 객체로 메서드를 호출하는 것을 반복하다보니 코드 줄이 자꾸 길어졌습니다. 그러다보니 어떻게 하면 조금 더 보기좋고, 가독성도 좋은 코드를 구현할 수 있을지에 대해 많이 생각하게 되었습니다. 그러다 정적 팩토리 메소드라는 것에 대해 알게 되었습니다.
- 느린만큼 더 깊어졌습니다.
- 전공 수업때에도 들어본 적 없고 그저 코드 리뷰를 주고받던 다른 분들의 코드에서 접하게 된 코드라 개념부터 사용법, 장점, 사용 시나리오 등 모든 것을 직접 찾아보고 공부해야만 했습니다. 미션 구현 내용도 많은데 이걸 언제 공부해서 적용할지 고민을 많이 했지만 고민이라고 생각된 부분에 대하여 해결하며 느리더라도 더 발전된 코드를 구현하고 싶다는 생각이 강하게 들었습니다. 덕분에 결과적으로 훨씬 깔끔하고 만족스러운 프로그램을 구현할 수 있었습니다.
- 매순간의 고민이 새로운 목표를 만들어냅니다.
- 정적 팩토리 메소드의 활용으로 이전보다 훨씬 더 깔끔한 도메인 설계가 되었습니다. 하지만 또 다른 궁금증이 생겼습니다. 정적 팩토리 메소드에 대해 공부를 하면서 정적 메소드와 싱글톤 패턴이라는 개념까지 접하게 되었습니다. 거기까지 공부하기엔 미처 시간이 부족하여 개념적인 공부만 하고 지나갔는데 기회가 된다면 싱글톤 패턴이라는 개념도 제 코드에 직접 적용해보고 싶습니다. 새로운 개념을 배우고 적용하고 그 과정에서 또 다른 목표가 생기는 게 코딩의 가장 흥미로운 점입니다. 앞으로도 성장할 길이 많다는 의미겠죠.
☃️ Enum 지지고 볶고 삶기
- 지난주부터 처음 사용하기 시작한 Enum 클래스가 점차 익숙해지기 시작했습니다.
- Enum의 사용에 익숙해지기 바빴던 지난 미션때에는 그저 Enum이 관련된 값들을 한번에 묶어 관리하기위한 정도의 용도인줄 알았습니다. 하지만 이번 미션에서 설계를 해보며 Enum이라는 클래스가 생각보다 더 다양하게 활용될수 있다는 것을 배웠습니다. 실제로 미션에 많은 Enum 클래스들을 적용해 코드의 가독성을 높으면서 간결성과 재사용성이 높아졌습니다.
- 가장 매력적인 점은 반복 가능한 Enum 활용이었습니다.
- 저의 코드 중 for (BadgeItem badgeItem : values())이라는 구문이 있습니다. 이 구문은 구문은 Enum의 각 멤버를 순회하는 기능을 제공합니다. 덕분에 외부에서 다른 조건문이나 자료형을 사용하지 않고도 Enum의 모든 값을 확인하거나 처리할 수 있습니다. 이는 특히 Enum이 변경될 때 유용하며, 새로운 멤버가 추가되더라도 코드를 수정할 필요가 없다는 것이 굉장한 장점이었습니다.
- Enum 간의 활용 또한 큰 장점이었습니다.
- Enum은 다른 Enum 객체와 상호작용할 수 있는 기능을 제공했습니다. 특정 Enum 객체에서 다른 Enunm 객체를 활용하여 일관성있게 관리하고 싶을 때 유용했습니다. 특히나 Enum은 상태나 속성을 가질 수 있어, 특정 값을 표현하는 데 필요한 모든 정보를 Enum 내에 캡슐화할 수 있었습니다. 각각의 Enum 멤버가 특정 의미를 나타내고 필요한 속성을 가질 때 안정성까지 보장할 수 있어 좋았습니다.
- 단순히 Enum을 사용하는 것이 아니라 생성한 클래스 혹은 객체를 어떻게 이용할수있는지 고민할만큼 발전했다는 사실만으로도 합격여부를 떠나 프리코스에서 많은 것을 얻었다고 생각합니다.
☃️ 내가 알던 객체가 아냐
- 클래스(객체)를 분리하고 객체를 객체스럽게 사용한다는 것
- 이번 미션을 수행하며 가장 깊게 고민한 부분입니다. 클래스 분리, 객체를 객체스럽게. 잠을 잘때에도 생각날만큼 머릿속을 둥둥 떠다니는 키워드들이었습니다. 객체의 본질을 이해하기 위해 단일 책임 원칙부터 다시 생각해보게되었습니다. 이 원칙과 관련하여 클래스를 분리하고 객체를 객체스럽게 사용하면 어떤 장점이 있는지, 어떤 원칙과 패턴을 준수해야하는지도 자연스럽게 생각하게 되었습니다. 객체 분리부터! 가 아니라 가장 처음의 상태부터 다시 짚어가다보니 객체 지향 설계와 단위 테스트에 대한 이해도가 훨씬 높아졌습니다. 사실 아직도 완전히 받아들이고 적용했다 자신할 순 없지만, why?라는 질문의 해답에 가까워진 시간이었습니다.
☺︎ 오류 해결
❄️ 잊어버린 혹은 잃어버린 맵을 찾아
- 맵에 데이터가 저장되지 않아 한참 헤메었습니다.
- 테스트코드를 작성하는 과정에서 메뉴의 중복을 방지하는 테스트코드를 작성할 때 맵에 반복되는 메뉴를 여러번 저장하여 유효성 검증을 하려고했습니다. 하지만 여러 방법으로 테스트코드를 작성해도 테스트 실패가 발생했습니다. 아무리 생각해도 테스트코드에는 문제가 없는데 왜 실패하는지 이해할 수 없어서 어떤 예외가 발생하는지 알아보는 코드를 실행했습니다. 그런데 너무나 어이없게도 예외 자체가 발생하지 않았습니다. 분명 프로그램 실행 시에는 예외처리가 되는데 테스트코드 상에서 예외가 발생하지 않는 다는 것이 이해가 가지 않았습니다. 그래서 저장한 맵의 키값들을 출력해보았습니다. 그랬더니 중복된 메뉴가 한번만 출력된다는 것을 알게되었습니다.
- 맵을 사용하면서 중복되는 키는 새로운 값을 가진 키가 입력되었을때 그 값으로 갱신된다는 사실을 잊고 있었습니다! 존재하지도 않은 잃어버린 맵을 찾아 저는 헤메고 있었던 거였습니다… 오류의 원인을 찾자마자 테스트할 수 있는 다른 방법을 찾게 되었고 해결하였습니다. 오류가 발생하면 출력을 찍거나 디버깅을 해서 원인을 찾는게 문제를 해결하는 가장 빠른 방법이라는 생각이 들었던 순간이었습니다.
❄️ 상수를 어찌하리오
- enum 클래스로 만든 값들을 제외한 매직넘버들을 줄이고 싶었습니다.
- enum 클래스를 사용하기 시작하면서 자잘자잘한 상수들도 하나로 묶어 enum으로 만들어야하나, 아니면 상수화를 해야하나, 매직넘버로 남겨두어야 하나에 대해 고민이 많았습니다. enum 처럼 관련이 있지도 않은데 한 클래스에서 한번정도 사용되는 값들이라 상수로 만들기도 애매하단 생각이 들었습니다. 그래서 계속 코드를 읽고 해당 클래스에서 사용되는 매직넘버들 값을 비교하여 최대한 같은 값을 사용하는데 사용의 의미가 같은 메서드들은 하나의 클래스에 모아 사용할 수 있도록 했습니다. 그러면서 자연스럽게 해당 클래스의 역할이 명확해져서 의미있는 리팩토링이 되었습니다.
☹︎ 아쉬운 점
프리코스 끝난 거………….는 당연하고
이번에도 역시나 예외처리 부분이 많이 아쉽습니다. 새로운 방식으로 예외 클래스를 처리하도록 바꾸었지만 동일한 예외로 다 처리한 기분이라 예외처리를 하고도 이유모를 찜찜함이 계속 남아 리팩토링하며 수정할 수 있는 부분을 최대한 수정하려고 노력했습니다. 하지만 만족이 안되고 턱없이 부족한 기분은 씻어낼 수 없었네요.. 결과 발표가 나기 전까지 계속해서 예외 처리에 대한 연습을 더 해야할 것 같습니다.
우테코 프리코스 기간 동안 공부한 내용
프리코스를 하며 배운 것들을 간간히 정리해둔 자료다. 구현을 하며 쫌쫌따리 정리해둔거라 깔끔하게 정리된건 아니지만, 꽤나 뿌듯하다.
나중에 돌아봤을 때 복습 겸 기록용ㅡㅡ^
NO LIMIT.
지난 회고록들
[우아한 테크 코스] 6기 프리코스 1주차
우아한 테크 코스 6기 - 프리코스 1주 차 부제 : 시험기간 중 프리코스요? 내가 해본 밤 샘 중 최고였어요. 두둥 과제 발표 프리코스 1주 차가 끝나자마자 호다닥 후기? 회고? 감사합니다? 를 쓰는
mingming0o0.tistory.com
[우아한 테크 코스] 6기 프리코스 2주차
우아한 테크 코스 6기 - 프리코스 2주 차 부제 : 마지막까지 ㅎ..하얗게 불태웠다.........(파사삭) 두둥근해가 떴습니다 자리에서 일어나서~과제를 확인해야지 다행이 죽지 않고 돌아온 2주 차 회
mingming0o0.tistory.com
[우아한 테크 코스] 6기 프리코스 3주차
우아한 테크 코스 6기 - 프리코스 3주 차 부제 : 갑자기 이러시면 당황스러워요 호달달😱 두치팍치 쿵 쿵 치 팍 치 예 ~미션을 확인합시다! 이번주. 일단 다들 독감 조심하세욧 목요일부터 기침
mingming0o0.tistory.com
우테코 프리코스. 끝.
즐거웠다.
'공log > [WoowaTC]' 카테고리의 다른 글
[우아한 테크 코스] 최종 코딩 테스트 후기 (0) | 2024.01.18 |
---|---|
[우아한 테크 코스] 6기 프리코스 3주차 (0) | 2023.11.09 |
[우아한 테크 코스] 6기 프리코스 2주차 (1) | 2023.11.02 |
[우아한 테크 코스] 6기 프리코스 1주차 (1) | 2023.10.26 |
[우아한 테크 코스] 6기 준비 시작! (0) | 2023.10.19 |