수업/회고

우테코 프리코스 1주차 회고

바이솔 2024. 10. 21. 23:04

https://github.com/Byesol/java-calculator-7/tree/Byesol

 

GitHub - Byesol/java-calculator-7

Contribute to Byesol/java-calculator-7 development by creating an account on GitHub.

github.com

 

 

프리코스 1주차과제를 진행하면서 느낀점들 기록입니다. 당장 블로그 글이나 회고 글을 쓸거란 생각을 아예 못한 채로 일단 눈앞의 과제를 진행하고 소감문 란에 쓴 걸 뒤늦게 여따 옮기는 것이기에 사진이나 코드 자료가 첨부되지 않은 형태입니다.

다시 한 차례 다 캡쳐하고 코드를 옮겨가며 할까 한 생각이 들었으나 일정이 바빠 시간을 효율적으로 써야하는 지금, 그건 너무 비효율적이란 생각이 들었다. 게다가 이 소감문도 너무 약간 자소서처럼 쓰려 한 감이 없지 않아 있다...

 

좀 더 본질에 집중해서 회고는 결국 나를 위한 거니까 다음주부터는 나를 위한 회고를 중간중간 여기에다 작성해두자.


(처음엔 주어진 테스트 코드만 통과하려 했던 나)

처음 과제를 시작할 때, 저는 단순히 주어진 테스트 코드에 맞춰 기능을 구현하는 데만 집중했습니다. 주어진 테스트 코드만 통과하면 성공이라고 생각했고, 문제의 본질을 파악하는 것보다는 어떻게든 통과하는 데에만 신경을 썼죠. 그래서 처음에는 주어진 기능 요구사항을 모두 충족하지 못한 채, 그저 "테스트 통과"라는 결과만으로 안도했던 기억이 납니다.

하지만 과제를 진행하면서 "테스트 통과"가 목표가 아닌, 실제 요구된 기능을 완벽히 구현하는 것이 진정한 목표라는 것을 깨닫게 되었습니다. 단순히 테스트를 통과하는 것이 아니라, 그 안에 포함된 모든 요구사항을 충족시키는 것이 중요하다는 점을 인식하게 된 것이죠.


(더 많은 테스트 코드의 필요성)

처음에는 우테코에서 제공한 테스트 코드만으로 충분하다고 생각했습니다. 하지만 과제를 진행하면서 특수문자가 커스텀 구분자일 경우, 입력이 아예 없을 경우, 혹은 구분자가 예상한 것과 다르게 사용된 경우 등 다양한 예외 상황이 발생한다는 것을 알게 되었습니다. 이런 상황들을 미리 고려하지 않으면 나중에 큰 문제로 이어질 수 있다는 걸 깨달았죠.

결국, 더 많은 테스트 코드가 필요하다는 것을 인식하게 되었고, 다양한 시나리오를 상상해보는 것이 개발 과정에서 얼마나 중요한지를 깨닫게 되었습니다. 이런 과정을 통해 문제를 더 깊이 바라보는 습관을 기르게 되었고, 이는 앞으로의 개발 과정에서 큰 도움이 될 것이라고 믿습니다.


(놓친 예외 처리: 인간의 한계와 체계적 방법론의 필요성)

사람인 이상, 모든 예외 상황을 처음부터 완벽히 고려하는 것은 불가능합니다. 실제로 저는 처음에는 escape 문자가 필요한 특수 문자의 상황을 전혀 고려하지 못했습니다. 여러 가지 예외 상황을 미리 생각해놓는 것이 중요하다는 걸 알면서도, 사람이기에 놓치는 부분은 항상 있을 수밖에 없죠. 그래서 이 부분을 해결하기 위해 다른 사람들과의 교류와 협력을 통해 보완하고 싶다는 생각이 들었습니다.

다가오는 코드 리뷰가 너무 기대됩니다. 제가 놓친 부분에 대해 다른 사람들의 피드백을 받고, 그 피드백을 통해 성장할 수 있을 것 같아요. 다른 사람들은 어떻게 그 문제들을 해결했는지, 그리고 제가 놓친 부분을 어떻게 보완할 수 있을지 다양한 관점에서 배우고 싶습니다. 코드 리뷰는 저에게 새로운 시각을 제공해줄 기회라고 생각해요.


(문제 본질을 놓치다: 첫 번째 목표에만 집중)

프리코스 과제를 진행하면서, 저는 한 가지 문제에 너무 집중한 나머지 다른 중요한 부분들을 간과했던 적이 있었습니다. 예를 들어, 무작정 \n을 인식하게 만드는 문제에만 매달렸습니다. "\n을 왜 인식하지 못할까?"라는 질문에만 매달려있다 보니, 다른 중요한 사항들은 놓치고 있었던 것이죠.

결국 split 함수에서 escape 문자가 필요한 상황을 인식하지 못한 채 여러 시도를 하다가 겨우 문제를 해결했습니다. 이런 식의 실험적 접근이 아니라, 처음부터 체계적으로 디버깅하고 분석했더라면 훨씬 더 빠르고 효율적으로 문제를 해결할 수 있었을 것입니다. 단순히 테스트 코드가 통과되면 기뻐할 것이 아니라, 문제의 본질을 깊이 파악하고 해결하는 능력을 길러야 한다는 깨달음을 얻었습니다.


(일관된 커밋 및 문서 작성의 중요성)

과제를 진행하면서, 커밋 메시지나 자바 코드 컨벤션을 통일성 있게 작성하는 것이 얼마나 중요한지 느꼈습니다. 예전에는 이런 부분에 큰 신경을 쓰지 않았지만, 과제 가이드를 따라 하나하나 컨벤션을 맞춰가며 작성하다 보니 이 작업이 왜 중요한지 알게 되었습니다.

그 이유는 바로 '협업'이었습니다. 개발자는 혼자 일하는 것이 아니라, 협업을 통해 일하고 성장합니다. 협업을 생각하면, 일관된 코드 스타일과 문서 작성이 얼마나 중요한지 실감하게 됩니다. README 파일도 체계적으로 정리해야 나뿐만 아니라 다른 사람들도 쉽게 프로젝트를 이해하고 기여할 수 있습니다. 이러한 통일성 있는 작업이 코드 리뷰와 협업을 원활하게 만드는 기본이라는 것을 이번 과제에서 실감했습니다.


(체계적 검증: 문제를 해결하는 절차의 중요성)

과제를 진행하면서, 문제를 체계적으로 해결하는 절차의 중요성도 깨달았습니다. 처음에는 문제가 발생하면 무조건 실행해보고, 조금씩 수정하는 식으로 접근하는 경향이 있었습니다. 하지만 이런 방식은 문제를 더 복잡하게 만들고 해결하는 데 시간이 오래 걸리게 합니다. 문제의 원인에 대한 가설을 세우고 이를 하나씩 차근차근 검증해나가는 방식이 훨씬 더 효율적이라는 것을 깨달았습니다.


(목표를 명확히 하고 옆에 두기)

저는 특정 문제에 너무 집중한 나머지 다른 중요한 요소들을 간과했던 적이 있었습니다. 예를 들어, split 함수에서 escape 문자를 처리할 때 너무 \n을 인식하게 만드는 데에만 매달리다 보니 다른 부분에서 문제가 발생했죠. 목표를 여러 개로 나누어 정리해두고, 이를 옆에 두고 계속 확인하며 작업하는 것이 더 좋은 방법이라는 깨달음을 얻었습니다. 문제의 여러 측면을 동시에 신경 쓸 수 있게 하는 중요한 습관이 될 것 같습니다.


(급한 마음을 다스리는 법: 시간을 정해 문제를 바라보자)

제게 큰 문제 중 하나는 마음이 너무 급하다는 점이었습니다. 문제가 발생하면 무조건 실행해보고 조금 수정한 뒤 다시 실행해보는 식으로 무한히 반복하곤 했습니다. 하지만 이 방식은 문제의 본질을 파악하지 못한 채 시간만 낭비하는 결과를 초래하곤 했죠.

그래서 저는 시간을 정해두고 문제를 해결하는 습관을 들이기로 결심했습니다. 예를 들어, 20분 동안은 문제의 세부 사항에 집중하고, 그 이후에는 전체적인 문제의 흐름을 다시 돌아보는 방식을 사용해보려 합니다. 이렇게 나무와 숲을 번갈아가며 보는 습관을 들이면, 문제 해결이 더 빠르고 효율적으로 진행될 것 같습니다.


앞으로의 계획: 적용하고 싶은 점들

(객체지향적으로 코드 작성하기)

지금까지는 하나의 어플리케이션 코드에 모든 기능을 넣는 방식으로 작업했지만, 앞으로는 객체지향적으로 코드를 구조화하는 데 중점을 두고 싶습니다. 각 기능을 클래스와 메서드로 적절히 분리하여 유지보수가 쉬운 코드를 작성하고 싶습니다. 이를 통해 코드가 더욱 읽기 쉽고 확장 가능한 구조를 만들고 싶습니다.


(나만의 테스트 코드 작성해보기)

우테코 측에서 제공한 테스트 코드 형식에만 의존하지 않고, 이제는 나만의 테스트 코드를 작성해보고 싶습니다. 테스트 코드는 단순한 기능 확인이 아니라, 제가 설계한 기능을 안전하게 보호하는 방패 역할을 해야 한다고 느꼈습니다. 직접 다양한 예외 상황을 생각해보고, 그에 맞는 테스트 코드를 작성함으로써 완성도 높은 코드를 만들어 나가고 싶습니다.


(적극적인 코드 리뷰 참여하기)

프리코스 2주차부터는 코드 리뷰가 가능하다고 들었습니다. 다른 사람들과의 교류를 통해 다양한 관점에서 예외 상황을 고려하고, 그들이 고민한 과정을 함께 나누고 싶습니다. 제 코드와 다른 사람들의 코드를 비교하면서 더 효율적인 방법을 고민해보고, 그것을 제 코드에 적용하는 방법을 찾아가고 싶습니다.


마무리

이번 과제를 통해 저는 개발자로서 많은 것을 배웠습니다. 예외 처리와 테스트 코드의 중요성, 협업을 위한 일관성 있는 커밋 및 문서 작성의 중요성, 그리고 체계적인 문제 해결 방법까지. 앞으로 이 배움들을 계속해서 발전시키고, 더 나은 개발자로 성장해 나갈 것입니다.