우아한 테크코스 - 프리코스 회고
24 Nov 2023 - juno
10/19 ~ 11/15 우아한 테크코스 프리코스를 진행한 회고
나는 지난 약 한달 간 우아한테크코스 6기에 도전했다.
4번의 프로그래밍 미션을 수행하기 때문에 지금까지 공부한것을 테스트 해보는 기회가 될 수 있을것 같았고 한달간 열심히 하면 합격할 수도 있을 거라는 자신감이 있었다.
결과는 완전히 실패했다! 생각보다 모르는게 많았고 생각보다 열심히하지 못했다.
하지만 모르는게 많았던 만큼 새로 배우는게 많았다.
이번에 어떤 것들을 새로 배웠는지 아래에 정리 해봤다.
새로 배울 수 있었던 것들
자바 코드 컨벤션
먼저 자바 코드 컨벤션 뭔가 개발자들 간의 약속이 있을것이라고는 생각했지만 이렇게 공식문서로 존재 할줄은 몰랐다. 하나하나 읽어보니 내가 컨벤션과 똑같이 사용하던 것도 있고 다르게 사용하던 것도 있었다. “근데 이 수 많은 컨벤션들을 어떻게 하나도 뺴놓지 않고 적용할 수 있지?” 하는 생각을 하는 와중에 다행히 우테코 프리코스 커뮤니티에서 좋은 게시글을 통해 IntelliJ의 자동 포매팅 기능을 알게 되어 적용하게 되었고 덕분에 코드 컨벤션을 모든 코드에 적용할 수 있게 되었다.
단위 테스트
우테코의 미션에는 모두 테스트 코드들이 포함되어있었고 print() 메서드나 log()메서드를 사용하여 테스트하는 것을 제한한다. 덕분에 나는 테스트 코드에 대해서 공부할 수 있었다. 내가 공부한것은 정말 일부인것 같긴하고 앞으로 더 공부해야할 내용인것 같다.
인텔리 제이
인텔리 제이가 필수는 아니고 권장이었는데 아직 java 프로그래밍을 할때 사용해 본 경험이 없어 사용해봤다.
처음에는 이클립스에만 적응되어있어서 좀 어색했지만 금방 적응할 수 있었고 나는 인텔리제이가 좀 더 편리하다는 느낌이 들었다.
아무래도 자동 포매팅이라던가 변수가 사용된 횟수를 표시해주는 등 보다 편리한 기능이 많다고 느꼈다.
요구사항분석 후 기능목록 정리
이전까지는 한번도 해본적 없는 부분이다. 정리되어있는 기능 혹은 주어진 요구사항을 보고 그냥 바로 코딩을 시작하곤 했었는데 이번 우테코를 진행하면서 처름으로 기능 목록
을 작성해 볼 수 있었다.
또한 1주차 미션 피드백 영상을 통해 전반적인 프로그램 작성 프로세스에 대해서 조금은 감을 잡을 수 있었다.
요구사항분석 -> 기능목록 작성 -> 기능에 따른 클래스, 메서드 명 정의 -> 기능 단위 프로그램 작성 및 테스트 -> 기능 완성
의 순으로 이루어 지는 것으로 보였다.
커밋 메시지 컨벤션(Angular 커밋 메시지 컨벤션)
커밋 메시지를 작성하는데에도 컨벤션이 존재 했다.
커밋 메시지를 작성할때 항상 어떤 단어를 사용할까 애매했고 고민들을 해왔는데 그런 고민이 해결되었다.
하드코딩
우테코를 하기 전까지는 하드코딩
이라는 단어조차 알지 못했고 하드코딩이 부적절할 것이라는 생각조차하지 못했다.
하지만 3주차에 2주차 미션 피드백에서 하드코딩을 피하라는 피드백을 받았고 그 덕분에 하드코딩에 대해 공부하게 되었다.
Enum
우테코에서 2주차 미션 피드백으로 하드코딩을 피하는 방법을 알려주면서 상수
를 활용하는 법을 알 수 있었고
그 다음주인 3주차 미션 피드백으로 상수가 서로 연관성이 있다면 static final
대신 Enum
을 활용하는 방법을 알 수 있었다.
위 두가지 모두 하드 코딩을 피하는 방법으로 활용되었다.
객체지향
아직 내가 완벽하게 객체 지향을 이해했다고는 하기 어렵지만 이번 우테코 활동을 통해 객체지향적으로 프로그램을 완성하려 노력해왔다. 이는 좀더 공부하고 스스로 정리해 볼 필요가 있는 것 같다.
MVC
4주차 부터 미션 프로그램의 규모가 커지면서 필요성을 깨닫고 적용하게 되었다.
완벽하게 이해하고 적용한 것 같지는 않지만 앞으로도 계속 공부하고 적용해봐야 할 것 같다.
새로 배운게 많았던 만큼 어려움을 겪은 것들도 많았다.
어려움을 겪은 것들
1. 테스트 코드 작성
먼저 가장 어려움을 겪었던 것은 테스트 코드를 작성하는 것이었다.
단위테스트에 대해서 공부를 하고 이론적으로는 이해할 수 있었다. 하지만 다양한 메서드들을 이 존재하기 때문에 테스트 코드의 방식도 다양했고 테스트 코드를 작성하기 쉬운 메서드도 있는 반면 테스트 코드를 작성하기 어려운 메서드들이 존재했다.
이럴때 “테스트 코드를 위해서 메서드를 바꿔도 되나?”, “어떻게든 잘 테스트코드를 만들어야 하나?” 하는 고민에 빠져 많은 시간을 지체하기도 했었다.
결국 고민한 두가지 방법을 모두 사용했다.
어떻게든 테스트 코드를 잘 만들어보고 정 안되면 메서드를 상속받아서 테스트를 위한 메서드를 따로 만들어서 사용하기도 했다.
이후 피드백을 통해서 테스트 코드에서만 쓰이는 메서드를 만들거나 테스트 코드를 위해 접근제어자를 변경하는 경우는 좋지 않다는 사실을 깨달았다.
하지만 테스트를 위해 기존 메서드를 테스트 가능하도록 리팩토링 하는 경우는 가능했고 TDD(Test Driven Development, 테스트 주도 개발)라는 테스트 코드를 기반으로 기능을 구현하는 방법론도 존재한다는 것을 알게되었다.
2. MVC패턴
프로그램의 규모가 점점 커지고 UI와 비즈니스 로직을 분리하면서 MVC패턴을 공부하고 적용하게 되었다.
하지만 배운것을 바로 적용하기란 쉽지 않았다. 뭔가 모범답안을 알고싶어 여러 인터넷 자료를 찾아보곤 했는데 MVC패턴에는 정답이 없었다.
그래도 Model, Veiw, Controller를 분리하고 최대한 규칙을 지키려고 노력했지만 잘 한건지는 모르겠다..ㅎ 누군가에게 피드백을 받아보고싶다.
3. 객체지향
3주차 미션의 피드백중 하나는 “객체를 객체스럽게”였다. 이 말도 참 어려웠다.
나는 이전까지 객체를 만들고 모든 객체들의 값들을 getter setter를 통해 객체의 데이터를 컨트롤 했었다.
하지만 그것은 부적절한 방식이었다.
객체를 객체스럽게 사용하기 위해서는 그 객체의 값을 가져와 컨트롤 하는것이 아니라 그 객체에 메서드를 통해 요청해서 원하는 값을 받아오는것이 적절한 방식이다.
4주차 부터는 이러한 방식을 적용하기 위해 노력했다.
하지만 그것도 쉽지만은 않았다. 이 메서드를 이 객체에 구현해서 가져오는것이 맞을까?, 논리적으로 관련된 메서드들은 다른 객체에 있는데 객체스럽게 사용하기 위해서 이 메서드만 이 객체에 구현하는게 가독성이 좋은가? 와 같은 고민들을 하면서 많은 시간을 보냈다.
물론 이것도 답이 있는것은 아닌것 같다.
마치며
이번 우아한테크코스 프리코스는 내가 얼마나 부족한지 깨닫게 해줬다.
우테코의 코치님께서 “메타인지”에 대한 말을 한적이있다. 메타인지는 객관적으로 자신을 바라보는 것이다. 이번 프리코스를 진행하면서 나 자신이 어떤 상태인지 생각해볼 수 있었던 것 같다.
“개발자로 취업하기에 나의 실력이 충분한가?”를 생각해 봤을때 전혀 아니라는 생각이든다. 개발 교육을 위한 프리코스에서 조차 배울게 너무 많았고 모르는게 너무 많았다. 현타온다.
하지만 개발에 몰입되는 순간이 재미있었다.
나는 항상 나에게 “개발이라는 일을 너무 쉽게 생각해서 전공을 제쳐두고 개발공부에 뛰어든것 아닌가?” 하는 의문을 던진다. 내가 나를 의심할 때마다 개발은 나에게 재미를 준다.
내가 선택한 이 길이 맞는건지 모르겠다. 끝까지 가서 개발자로 취업을 해보고 싶다. 그러기위해서 앞으로 더 열심히 공부해야겠다..