1. 소프트웨어는 작동해야 한다, 돌아가는 쓰레기일지라도
완성하지 못하더라도, 일부분이라도 잘 구현하고자 마음을 먹었던 나는
최종 코딩테스트 미션 메일에서 아래와 같은 내용을 읽고 아차 싶었다.
나의 짧은 개발 공부 경험 중 그 어느 때보다 극단적인 조건 속에서 이상과 현실 사이를 고민할 수 있는 시간이었다.
2. 이전 기수 미션에 비해 쉽게 느껴지는 요구사항
기능 요구사항을 분석하고, 어떻게 구현할지 클래스 구조를 정리하면서
어, 생각보다 할 만 하겠는데..?
라는 생각이 먼저 들었다.
하지만 이렇게 난이도를 조절한 이유가 있을테니
얼른 구현을 마치고 테스트 코드 작성, 리팩토링까지 해야겠다는 생각에 더 마음이 조급해졌다.
그래서 조급한 마음을 컨트롤하지 못한 탓에, 오히려 더 꼼꼼하지 못했고 공부할 때는 내가 할 거라 생각지 못한 실수까지 더 많이 하게 되었던 것 같다.
그럼에도 이렇게 하길 잘했다, 고 생각하는 것은
1. 구현하기 전에 주어진 ApplicationTest
의 코드를 먼저 파악
2. view 로직은 간단하게 먼저 구현
3. 리팩토링하기 전에 단위 테스트 코드를 작성
이 외에도 부족한 점이 많겠지만 크리티컬했다고 생각하는 실수들이 있다.
사실 이렇게 적기에 부끄러운 실수들인데, 그런 만큼 잊지 않기 위해 적어본다.
1. 기능 요구사항에 대한 부정확한 구현
2. 엉뚱한 코딩 실수
DislikeMenus
클래스로 관리하도록 변경했는데, 생성자에서 menus
라는 변수명으로 받은 인자값을 멤버변수에 저장해야 하는데 자기 자신의 변수명을 적어버렸다. public DislikeMenus(List<String> menus) {
validateMenus(menus);
this.dislikeMenu = dislikeMenu;
}
평소 과제를 진행하듯이 코딩했다면 전혀 상상도 못할 실수라서 어떻게 이런 짓을 했는지 충격을 받았다..menus
, dislikeMenu
와 같이 헷갈리는 변수명을 혼용해서 사용해 스스로 실수를 유발했다는 점에 주목해야 할 것 같다.3. 디버깅은 차분하고 정확하게
dislikeMenu
를 초기화하지 않은 멤버변수로 둔 상태에서 위와 같은 생성자 메소드가 실행됐고, 이에 따라 DislikeMenus
객체를 생성할 때 NullpointerException
이 발생했기 때문이다.new ArrayList<>()
를 초기화시키는 엉뚱한 방식으로 오류만 발생하지 않게 수정해버렸다. 오류는 발생하지 않지만 전달받은 menus
는 사용하지 않고 dislikeMenu
변수에는 항상 빈 리스트가 저장되어 있도록 수정해버린 것이다.4. 기계적으로 코딩하지 말기
pf -> private final, ps -> public static, ...
psf
은 public static final
의 단축키였고,ErrorMessage
, InputMessage
와 같은 별도 클래스에 정의해서 사용했기 때문에 그 때 많이 활용하는 것이었다.public
대신 private
을 쓰는 것이 적절했다.psf
단축키를 사용해 상수를 정의하던 습관 탓에,public
으로 선언했다는 사실을 뒤늦게 발견했다..시험을 마치고 나올 때는, 웃기게도 나쁘지 않았다며 자만에 빠질 뻔했다. 하지만 나의 코드에서 각종 실수를 발견하고 다른 분들의 잘 구현된 코드를 보면서 정신이 확 들었다. 역시 실전은 다르구나 생각했다. 실전이라는 리트머스지를 통해 또다시 새로운 부족한 점들을 발견할 수 있었던 것 같다.
합격이 간절했던 만큼 나의 부족함이 계속 발견되는 일은 유쾌하지 않았지만
돌이켜보면 그만큼 더 배울 수 있는 시간이었다.
그럼에도 처음 우테코에 지원할 때와 지금 나 자신을 비교하면 정말 많이 성장했다는 것, 그리고 최선을 다했다는 것만큼은 확신할 수 있다. 그래서 너무 아쉬웠지만 후회는 없었다. 이런 나의 성장과 간절함이 평가에 좋게 작용하기만을 바라며 발표일을 기다렸다.
이전에는 안하던 실수를 했다 하더라도, 억울해할 일이 아니라 이 역시 지금 나의 역량을 보여주는 지표 중 하나라고 생각했다. 그래서 만약 떨어진다면 그건 그거대로 겸허하게 받아들이자고 열심히 마음 속으로 되새겼다. 그러고 나니 차분한 마음으로 다시 지난 코드를 꺼내보고 리팩토링을 해볼 수 있었다.
다들 그러했겠지만 이렇게 하루에도 몇 번씩 기대와 해탈을 반복하다가...
너무나 감사하게도 합격 메일을 받아보게 되었다. 😇
사실 합격하고 너무 너무 기쁜 것과는 별개로 왜 내가 합격했을까..?
하는 의문이 상당히 많이 들었다.
그래서 생각해보다보니 합격 기준을 추측하기보다 나 스스로 무엇은 잘했고 무엇이 아쉬웠는지 정리해보고 싶어졌다. (물론 어디까지나 스스로의 생각이기 때문에 잘못된 평가일 수는 있다.)