더 구체적인 학습 내용과 회고는 일일 학습 기록에서 확인할 수 있습니다.

[ 서론 ]
저는 정말로 견고함을 중요시하는 사람으로서, 프리코스 과정을 따라가려면 Java의 기본기 + 객체 지향의 기본기가 제일 중요하다고 생각했습니다. 짧은 시간 안에 프리코스 과정에서 만족할 수 있는 퍼포먼스를 내려면 노력도 물론 중요하지만, 일단 기본기가 탄탄해야 새로운 지식이 들어올 수 있기 때문입니다. 따라서 10월 9일부터 Java와 객체지향의 기본적인 공부를 하는데에 집중했습니다. 그렇게 약간은 불안한 마음을 갖고 10월 15일 프리코스를 시작했습니다.
[ 프리코스 시작 ]
프리코스가 시작되었습니다. 주어지는 1주 차 과제는 아래의 학습 목표를 가지고 있었습니다.
- Git, GitHub, IDE 등 실제 개발을 위한 환경에 익숙해진다.
- 교육 분야에 맞는 프로그래밍 언어를 사용하여 간단한 문제를 해결한다.
불안한 마음과는 달리 생각했던 것보다 약간은 워밍업 느낌의 과제에 마음이 살짝 놓였습니다.
1주 차 동안의 구체적인 목표를 설정하던 중 프리코스 커뮤니티(디스코드)에서 어떤 분이 본인은 모닝 루틴으로 CS 책의 소단원을 하나 읽고, 알고리즘 문제를 하나 푼다는 것을 듣게 되었습니다.
저는 사실 평소에 공부를 시작하기 힘들어하는 사람이었습니다. (사실 모두가 그렇겠지만요..!) 근데 막상 공부를 시작하면 미친 듯이 집중하고 몰입해서 밥도 거르는 그런 스타일이었습니다. 그래서 항상 입에 달고 사는 말이 "5분이면 될 거야."였습니다. 왜냐면, 실제로는 5분으로 안 끝날 걸 알면서도 스스로 5분이면 될 거라고 하면서 일단 5분만 하다 보면 저도 모르게 집중해 버려서 몇 시간이나 몰입하기 때문입니다.
올해 초에 Obsidian에 매일 간단한 스터디 로그를 쓰는 것을 습관들이고 나서부터, 이런 "5분이면 될 거야" 스킬처럼 학습 시작의 진입 장벽이 낮아진 느낌이 들었습니다. 매일매일 무언가를 배우고 그것을 기록하는 것이 습관화되니까 딱히 하기 싫게 느껴지지도 않고 오히려 즐겁고 뿌듯한 시간들을 보냈습니다.
근데 현재 제 방식의 문제는 구체적인 일일 목표는 없다는 것입니다. 그래서, 위에서 말한 모닝 루틴처럼 무언가 매일매일 하는 구체적 목표가 작게라도 있으면 좋겠다고 생각이 들었고 매일 지키도록 노력하면 학습 습관을 기르는 데에 더 큰 도움이 될 거라고 생각했습니다. 그래서 저만의 일일 목표를 세웠습니다. 바로 알고리즘 문제 1개 풀기입니다. 알고리즘은 사실 배울수록 다다익선이라고 생각하기 때문에 의지를 잃지 않고 오래 하기 좋은 목표라고 여겨졌습니다.
이렇게 프리코스가 스스로 학습하는 기간인 만큼, 프리코스 1일 차를 저의 학습 방식을 점검하기 시작한 1일 차라고도 부르기로 했습니다.
또, 학습의 동기부여를 위해서 매일 아침 학습을 다짐하고, 매일 저녁 오늘의 학습 내용을 공유하는 프리코스 그룹 "우아한 학습 모임"을 만들었습니다. 19명의 분들과 매일같이 출석하는데, 한 분도 빠짐없이 항상 열심히 하시는 모습에 저도 동기 부여를 많이 받은 것 같습니다.
[ 1주차 목표 ]
저의 1주차 목표는 다음과 같았습니다.
1. 주어지는 과제의 요구사항을 완벽하게 공부하기.
2. 이후 남는 시간을 Java + OOP 공부에 쓰기.
과제의 요구사항에서 공부해야 하는 부분은 크게
1. Angular Git Commit Message Conventions
2. Java Style Guide
입니다.
[ 과제 포크 & 클론 ]
제일 처음으로 맞닥뜨린 문제는 JDK 버전 문제였습니다. 현재 Java 17이었지만 과제 요구 사항은 Java 21이었습니다.
이에 대해 해결 방법을 찾던 중 예전에 Java 버전 관리용으로 설치했던 Jenv라는 툴이 생각났습니다. 역시 ~/.zshrc에 jenv 관련 설정이 있었고 이번 과제 폴더에서만 JDK 21을 사용하도록 설정했습니다.
[ AngularJS Git Conventions]
커밋 컨벤션을 보고 제일 처음 든 생각이, AngularJS에 대해 찾아보니까 2009년에 공개되어서 커뮤니티에 의해 관리되었던 프로젝트던데 그때 아무 커밋 컨벤션도 없었을 테니 커밋 내역이 난장판이었을 것 같다는 생각이었습니다.
사실 개발자들에게 정형화된 커밋 툴이 있었고, 거기서 AngularJS conventions에서 제시하는 양식을 미리 UI로 짜놨다면 이렇게 커뮤니티에서 직접 convention을 협의했을 리도 없을 텐데. 뭔가 이때의 상황을 상상하니까 되게 재밌으면서도 직접 컨벤션을 토론하고 정의하는 모습이 멋있었습니다.
많은 사람들이 토론 끝에 내놓은 컨벤션이기에 지키는 것이 당연하게도 협업에 도움이 된다는 것에 의심이 없습니다. 이후에 컨벤션을 따르고 나서 정리된 저의 커밋 내역을 보니 변경 사항들이 한눈에 들어오는 게 정말 좋았습니다.
[ Java Style Guide ]
IntelliJ에 코드 컨벤션 설정 관련 .xml 파일을 적용하면 자동으로 코드를 린트해준다는 사실을 알았습니다.
솔직히, 사람은 실수를 할 수밖에 없는데 이렇게 도구로써 코드 스타일을 강제할 수 있다면 협업에 정말 편리할 것 같다는 생각을 했습니다.
생각보다 코드 스타일에서 이미 제가 쓰고 있는 스타일이 많았고, 일부 엄격한 룰은 어느 정도의 합리적인 이유가 따랐기 때문에 숙지하는 데에는 오랜 시간이 걸리지 않았습니다. 특히 Long 타입을 초기화할 때 리터럴 'L'을 사용해야 하는 점, 별표 주석에는 각 줄에 별표를 달아야 하는 점, 변수 초기화를 반점을 사용해서 연달아하면 안 되는 점은 처음 알게 되었습니다.
[ 기능 정리 및 구현 ]
처음부터 머릿속으로만 상상하면서 너무 구체적인 틀을 잡아버리면 오히려 그 틀에 갇혀버릴 수 있다는 생각을 하고 각 단계의 목표를 적당하게 구체적으로, 어느 정도는 추상화를 하며 작성하였습니다.
프리코스 1주 차에서 요구하는 기능은 간단해 보여도 효율적으로 구현하긴 꽤 어려웠습니다. 특히, 문자열에 관련한 연산 비용이 높기 때문에 최대한 문자열 연산을 자제해야 하는데 그러면 구현이 복잡해지게 되었습니다. 그러다가 StringBuilder라는 .append() 연산이 효율적인 클래스를 알게 되었고, 이를 이용해서 구현하게 되었습니다.
이미 Java에서 다양한 기능을 클래스로 제공하기 때문에 이미 구현되어 있는 클래스를 사용하면 개발을 효율적으로 할 수 있었습니다. 하지만 Java API에서 제공하는 기본 기능들을 쓰려면 어떤 기능들이 있는지 최소한 알고 있어야 하기 때문에, 다음에 Java API에 대해 알아봐야겠다는 생각을 하게 되었습니다.
[ 객체 지향으로의 전환 ]
처음에는 주어진 과제가 절차 지향으로 풀어도 충분하다고 생각해서 OOP를 적용하지 않고, 메인 클래스에 모든 기능을 구현했습니다.
과제에서 요구하는 기능을 절차 지향으로 구현해도 코드가 100줄에 수렴했기 때문에, 굳이 개발 시간이 오래 걸리는 OOP를 적용하는 것은 과유불급이라는 생각이 들었습니다.
하지만, 만약 제가 작성한 코드가 재사용되거나 새로운 기능을 추가해야 하는 상황이 온다면. 혹은 이 프로젝트가 협업 프로젝트였다면 절차 지향보다 객체 지향이 훨씬 유리하겠다는 생각을 했습니다. 그래서, 객체 지향 설계를 학습할 겸 프로젝트를 객체 지향으로 전환하고 이전 코드와 이후 코드를 비교해 보기로 했습니다. 부족한 시간 속에서 객체 지향 설계를 제대로 하기 위해 인프런 강의와 객체지향의 사실과 오해라는 책을 빠르게 읽고 구현에 나섰습니다.
구현 이후, 이전 코드와 현재의 코드를 다시 바라봤을 때는 확실하게 "객체 지향 코드가 절차 지향 코드보다 깔끔하다."라는 결론을 내렸습니다. 이것 말고도 객체 지향 코드는 변경 사항을 추가하기 편한 점과 코드를 재사용하기 편한 것이 눈에 보였습니다. 각 클래스와 객체의 책임이 분명하기 때문에, 저는 계산기를 위한 코드들을 작성했지만 결국엔 여러 가지의 목표를 가지는 객체들을 만들었으니 꼭 계산기가 아니더라도 특정 목표가 필요하면 특정 객체를 재사용할 수 있겠다는 생각이 들었습니다.
[ 요약 ]
- 배운 점 -
1. Java 언어의 중급 문법을 익혔습니다. (상속, 인터페이스, 다형성, 캐스팅 등)
2. Git 사용에 대해 더 깊이 알게 되었고, 특히 patch 기능으로 커밋 관리를 효율적으로 할 수 있게 되었습니다.
3. AngularJS Commit Conventions를 배우고 실천하는 습관을 들였습니다.
4. Java Style Guide를 배우며 코드 스타일을 개선하게 되었습니다.
5. 객체 지향에 대해 배우게 되었고 얼마나 심오한 개념인지 느끼게 되었습니다. 이후 코드를 어떻게 개선해야 할지 알아보던 중 MVC 패턴의 개념도 알게 되었습니다.
- 느낀 점 -
1. 절차 지향과 객체 지향의 차이
이 과제를 완료하는 데에 절차 지향이 적합할지, 객체 지향이 적합할지 확신하지 못했습니다.
때문에 처음에는 절차 지향 방식으로 코딩했지만 이후 객체 지향 방식으로 전환했습니다.
이후 이전에 작성한 절차 지향 코드와 객체 지향 코드를 비교하니, 객체 지향의 코드가 훨씬 깔끔하고 이해하기 쉬우며, 변경 사항을 추가하기 편하다는 것을 느꼈습니다.
각 객체의 책임을 분명하게 나눠 설계하니 자연스럽게 재사용이 쉬운 코드가 되었다는 게 특히 인상 깊었습니다.
2. 협력을 위한 학습
Java와 객체 지향 설계는 보통 규모가 큰 프로젝트에서 사용되고, 규모가 클수록 많은 사람들이 협력하는 것은 당연할 것입니다. 따라서 저에게 자바 + 객체지향 + 컨벤션을 동시에 배우는 것은 잘 협력하는 방법을 배우는 것과 같았습니다. 덕분에 기존의 "깔끔한 코드를 작성해야겠다" 라는 관점에서 한 단계 나아가서, 어떻게 남이 잘 이해할 수 있는 코드(객체지향 설계), 남이 잘 이해할 수 있는 스타일(Java Style Guide), 남이 잘 이해할 수 있는 커밋 메시지(AngularJS Commit Message Convention) 를 작성할 수 있을 지 배울 수 있었습니다. 또 실제로 모두 이행하고 나서 깔끔한 커밋 내역과 코드를 봤을 때 저도 편함을 느꼈습니다. 결국 남이 이해하기 쉬운 방식은 나도 이해하기 쉬운 방식임을 깨달았습니다.
3. 공동체의 힘
매일 공부를 이어가는 데에는 꾸준한 동기 부여가 필요합니다. 프리코스 커뮤니티의 "일일 학습 다짐방"에서 매일 학습을 시작하며 목표를 다지는 수많은 분들 덕분에 저도 계속해서 동기를 유지할 수 있었습니다. 앞으로도 이런 분들과 같은 목표를 향해 함께 나아가고 서로 피드백하며 성장할 수 있다면 정말 큰 힘이 될 것이라고 느꼈습니다.
- 많은 시간을 투자한 부분 -
1. Java 문법을 배우는 데 많은 시간을 투자했습니다. "김영한의 실전 자바 - 기본편"을 완강하며 상속, 인터페이스, 다형성, 캐스팅 등을 공부했습니다.
2. 객체 지향 프로그래밍에 대해 깊이 공부하는 데에도 많은 시간이 들었습니다. '객체지향의 사실과 오해'라는 책과 여러 온라인 자료들을 참고했습니다.
3. 절차 지향 코드를 객체 지향으로 변환하는 작업에 시간을 많이 투자했습니다. 특히 각 클래스의 책임을 어떻게 나눌지 고민하며 구조를 설계하는 과정이 시간이 많이 소요되었습니다.
[ 마치며 ]
이렇게 1주차 과제에서 의도하는 학습 목표를 달성하고, Java와 객체지향에 대해 공부를 할 수 있었습니다.
지금까지는 객체 지향 설계가 이렇게 아름다운 것인지 몰랐는데, 앞으로 있을 심도 깊은 학습들이 기대되는 시간이었습니다.
'우아한테크코스' 카테고리의 다른 글
[우아한테크코스 7기] 최종 합격 (0) | 2025.01.01 |
---|---|
[우아한테크코스 7기] 1차 합격 및 최종 테스트 회고 (3) | 2024.12.19 |
[우아한테크코스 7기] 프리코스 4주차 및 종료 회고록 (1) | 2024.11.16 |
[우아한테크코스 7기] 프리코스 3주차 회고록 (1) | 2024.11.06 |
[우아한테크코스 7기] 프리코스 2주차 회고록 (0) | 2024.10.29 |
더 구체적인 학습 내용과 회고는 일일 학습 기록에서 확인할 수 있습니다.

[ 서론 ]
저는 정말로 견고함을 중요시하는 사람으로서, 프리코스 과정을 따라가려면 Java의 기본기 + 객체 지향의 기본기가 제일 중요하다고 생각했습니다. 짧은 시간 안에 프리코스 과정에서 만족할 수 있는 퍼포먼스를 내려면 노력도 물론 중요하지만, 일단 기본기가 탄탄해야 새로운 지식이 들어올 수 있기 때문입니다. 따라서 10월 9일부터 Java와 객체지향의 기본적인 공부를 하는데에 집중했습니다. 그렇게 약간은 불안한 마음을 갖고 10월 15일 프리코스를 시작했습니다.
[ 프리코스 시작 ]
프리코스가 시작되었습니다. 주어지는 1주 차 과제는 아래의 학습 목표를 가지고 있었습니다.
- Git, GitHub, IDE 등 실제 개발을 위한 환경에 익숙해진다.
- 교육 분야에 맞는 프로그래밍 언어를 사용하여 간단한 문제를 해결한다.
불안한 마음과는 달리 생각했던 것보다 약간은 워밍업 느낌의 과제에 마음이 살짝 놓였습니다.
1주 차 동안의 구체적인 목표를 설정하던 중 프리코스 커뮤니티(디스코드)에서 어떤 분이 본인은 모닝 루틴으로 CS 책의 소단원을 하나 읽고, 알고리즘 문제를 하나 푼다는 것을 듣게 되었습니다.
저는 사실 평소에 공부를 시작하기 힘들어하는 사람이었습니다. (사실 모두가 그렇겠지만요..!) 근데 막상 공부를 시작하면 미친 듯이 집중하고 몰입해서 밥도 거르는 그런 스타일이었습니다. 그래서 항상 입에 달고 사는 말이 "5분이면 될 거야."였습니다. 왜냐면, 실제로는 5분으로 안 끝날 걸 알면서도 스스로 5분이면 될 거라고 하면서 일단 5분만 하다 보면 저도 모르게 집중해 버려서 몇 시간이나 몰입하기 때문입니다.
올해 초에 Obsidian에 매일 간단한 스터디 로그를 쓰는 것을 습관들이고 나서부터, 이런 "5분이면 될 거야" 스킬처럼 학습 시작의 진입 장벽이 낮아진 느낌이 들었습니다. 매일매일 무언가를 배우고 그것을 기록하는 것이 습관화되니까 딱히 하기 싫게 느껴지지도 않고 오히려 즐겁고 뿌듯한 시간들을 보냈습니다.
근데 현재 제 방식의 문제는 구체적인 일일 목표는 없다는 것입니다. 그래서, 위에서 말한 모닝 루틴처럼 무언가 매일매일 하는 구체적 목표가 작게라도 있으면 좋겠다고 생각이 들었고 매일 지키도록 노력하면 학습 습관을 기르는 데에 더 큰 도움이 될 거라고 생각했습니다. 그래서 저만의 일일 목표를 세웠습니다. 바로 알고리즘 문제 1개 풀기입니다. 알고리즘은 사실 배울수록 다다익선이라고 생각하기 때문에 의지를 잃지 않고 오래 하기 좋은 목표라고 여겨졌습니다.
이렇게 프리코스가 스스로 학습하는 기간인 만큼, 프리코스 1일 차를 저의 학습 방식을 점검하기 시작한 1일 차라고도 부르기로 했습니다.
또, 학습의 동기부여를 위해서 매일 아침 학습을 다짐하고, 매일 저녁 오늘의 학습 내용을 공유하는 프리코스 그룹 "우아한 학습 모임"을 만들었습니다. 19명의 분들과 매일같이 출석하는데, 한 분도 빠짐없이 항상 열심히 하시는 모습에 저도 동기 부여를 많이 받은 것 같습니다.
[ 1주차 목표 ]
저의 1주차 목표는 다음과 같았습니다.
1. 주어지는 과제의 요구사항을 완벽하게 공부하기.
2. 이후 남는 시간을 Java + OOP 공부에 쓰기.
과제의 요구사항에서 공부해야 하는 부분은 크게
1. Angular Git Commit Message Conventions
2. Java Style Guide
입니다.
[ 과제 포크 & 클론 ]
제일 처음으로 맞닥뜨린 문제는 JDK 버전 문제였습니다. 현재 Java 17이었지만 과제 요구 사항은 Java 21이었습니다.
이에 대해 해결 방법을 찾던 중 예전에 Java 버전 관리용으로 설치했던 Jenv라는 툴이 생각났습니다. 역시 ~/.zshrc에 jenv 관련 설정이 있었고 이번 과제 폴더에서만 JDK 21을 사용하도록 설정했습니다.
[ AngularJS Git Conventions]
커밋 컨벤션을 보고 제일 처음 든 생각이, AngularJS에 대해 찾아보니까 2009년에 공개되어서 커뮤니티에 의해 관리되었던 프로젝트던데 그때 아무 커밋 컨벤션도 없었을 테니 커밋 내역이 난장판이었을 것 같다는 생각이었습니다.
사실 개발자들에게 정형화된 커밋 툴이 있었고, 거기서 AngularJS conventions에서 제시하는 양식을 미리 UI로 짜놨다면 이렇게 커뮤니티에서 직접 convention을 협의했을 리도 없을 텐데. 뭔가 이때의 상황을 상상하니까 되게 재밌으면서도 직접 컨벤션을 토론하고 정의하는 모습이 멋있었습니다.
많은 사람들이 토론 끝에 내놓은 컨벤션이기에 지키는 것이 당연하게도 협업에 도움이 된다는 것에 의심이 없습니다. 이후에 컨벤션을 따르고 나서 정리된 저의 커밋 내역을 보니 변경 사항들이 한눈에 들어오는 게 정말 좋았습니다.
[ Java Style Guide ]
IntelliJ에 코드 컨벤션 설정 관련 .xml 파일을 적용하면 자동으로 코드를 린트해준다는 사실을 알았습니다.
솔직히, 사람은 실수를 할 수밖에 없는데 이렇게 도구로써 코드 스타일을 강제할 수 있다면 협업에 정말 편리할 것 같다는 생각을 했습니다.
생각보다 코드 스타일에서 이미 제가 쓰고 있는 스타일이 많았고, 일부 엄격한 룰은 어느 정도의 합리적인 이유가 따랐기 때문에 숙지하는 데에는 오랜 시간이 걸리지 않았습니다. 특히 Long 타입을 초기화할 때 리터럴 'L'을 사용해야 하는 점, 별표 주석에는 각 줄에 별표를 달아야 하는 점, 변수 초기화를 반점을 사용해서 연달아하면 안 되는 점은 처음 알게 되었습니다.
[ 기능 정리 및 구현 ]
처음부터 머릿속으로만 상상하면서 너무 구체적인 틀을 잡아버리면 오히려 그 틀에 갇혀버릴 수 있다는 생각을 하고 각 단계의 목표를 적당하게 구체적으로, 어느 정도는 추상화를 하며 작성하였습니다.
프리코스 1주 차에서 요구하는 기능은 간단해 보여도 효율적으로 구현하긴 꽤 어려웠습니다. 특히, 문자열에 관련한 연산 비용이 높기 때문에 최대한 문자열 연산을 자제해야 하는데 그러면 구현이 복잡해지게 되었습니다. 그러다가 StringBuilder라는 .append() 연산이 효율적인 클래스를 알게 되었고, 이를 이용해서 구현하게 되었습니다.
이미 Java에서 다양한 기능을 클래스로 제공하기 때문에 이미 구현되어 있는 클래스를 사용하면 개발을 효율적으로 할 수 있었습니다. 하지만 Java API에서 제공하는 기본 기능들을 쓰려면 어떤 기능들이 있는지 최소한 알고 있어야 하기 때문에, 다음에 Java API에 대해 알아봐야겠다는 생각을 하게 되었습니다.
[ 객체 지향으로의 전환 ]
처음에는 주어진 과제가 절차 지향으로 풀어도 충분하다고 생각해서 OOP를 적용하지 않고, 메인 클래스에 모든 기능을 구현했습니다.
과제에서 요구하는 기능을 절차 지향으로 구현해도 코드가 100줄에 수렴했기 때문에, 굳이 개발 시간이 오래 걸리는 OOP를 적용하는 것은 과유불급이라는 생각이 들었습니다.
하지만, 만약 제가 작성한 코드가 재사용되거나 새로운 기능을 추가해야 하는 상황이 온다면. 혹은 이 프로젝트가 협업 프로젝트였다면 절차 지향보다 객체 지향이 훨씬 유리하겠다는 생각을 했습니다. 그래서, 객체 지향 설계를 학습할 겸 프로젝트를 객체 지향으로 전환하고 이전 코드와 이후 코드를 비교해 보기로 했습니다. 부족한 시간 속에서 객체 지향 설계를 제대로 하기 위해 인프런 강의와 객체지향의 사실과 오해라는 책을 빠르게 읽고 구현에 나섰습니다.
구현 이후, 이전 코드와 현재의 코드를 다시 바라봤을 때는 확실하게 "객체 지향 코드가 절차 지향 코드보다 깔끔하다."라는 결론을 내렸습니다. 이것 말고도 객체 지향 코드는 변경 사항을 추가하기 편한 점과 코드를 재사용하기 편한 것이 눈에 보였습니다. 각 클래스와 객체의 책임이 분명하기 때문에, 저는 계산기를 위한 코드들을 작성했지만 결국엔 여러 가지의 목표를 가지는 객체들을 만들었으니 꼭 계산기가 아니더라도 특정 목표가 필요하면 특정 객체를 재사용할 수 있겠다는 생각이 들었습니다.
[ 요약 ]
- 배운 점 -
1. Java 언어의 중급 문법을 익혔습니다. (상속, 인터페이스, 다형성, 캐스팅 등)
2. Git 사용에 대해 더 깊이 알게 되었고, 특히 patch 기능으로 커밋 관리를 효율적으로 할 수 있게 되었습니다.
3. AngularJS Commit Conventions를 배우고 실천하는 습관을 들였습니다.
4. Java Style Guide를 배우며 코드 스타일을 개선하게 되었습니다.
5. 객체 지향에 대해 배우게 되었고 얼마나 심오한 개념인지 느끼게 되었습니다. 이후 코드를 어떻게 개선해야 할지 알아보던 중 MVC 패턴의 개념도 알게 되었습니다.
- 느낀 점 -
1. 절차 지향과 객체 지향의 차이
이 과제를 완료하는 데에 절차 지향이 적합할지, 객체 지향이 적합할지 확신하지 못했습니다.
때문에 처음에는 절차 지향 방식으로 코딩했지만 이후 객체 지향 방식으로 전환했습니다.
이후 이전에 작성한 절차 지향 코드와 객체 지향 코드를 비교하니, 객체 지향의 코드가 훨씬 깔끔하고 이해하기 쉬우며, 변경 사항을 추가하기 편하다는 것을 느꼈습니다.
각 객체의 책임을 분명하게 나눠 설계하니 자연스럽게 재사용이 쉬운 코드가 되었다는 게 특히 인상 깊었습니다.
2. 협력을 위한 학습
Java와 객체 지향 설계는 보통 규모가 큰 프로젝트에서 사용되고, 규모가 클수록 많은 사람들이 협력하는 것은 당연할 것입니다. 따라서 저에게 자바 + 객체지향 + 컨벤션을 동시에 배우는 것은 잘 협력하는 방법을 배우는 것과 같았습니다. 덕분에 기존의 "깔끔한 코드를 작성해야겠다" 라는 관점에서 한 단계 나아가서, 어떻게 남이 잘 이해할 수 있는 코드(객체지향 설계), 남이 잘 이해할 수 있는 스타일(Java Style Guide), 남이 잘 이해할 수 있는 커밋 메시지(AngularJS Commit Message Convention) 를 작성할 수 있을 지 배울 수 있었습니다. 또 실제로 모두 이행하고 나서 깔끔한 커밋 내역과 코드를 봤을 때 저도 편함을 느꼈습니다. 결국 남이 이해하기 쉬운 방식은 나도 이해하기 쉬운 방식임을 깨달았습니다.
3. 공동체의 힘
매일 공부를 이어가는 데에는 꾸준한 동기 부여가 필요합니다. 프리코스 커뮤니티의 "일일 학습 다짐방"에서 매일 학습을 시작하며 목표를 다지는 수많은 분들 덕분에 저도 계속해서 동기를 유지할 수 있었습니다. 앞으로도 이런 분들과 같은 목표를 향해 함께 나아가고 서로 피드백하며 성장할 수 있다면 정말 큰 힘이 될 것이라고 느꼈습니다.
- 많은 시간을 투자한 부분 -
1. Java 문법을 배우는 데 많은 시간을 투자했습니다. "김영한의 실전 자바 - 기본편"을 완강하며 상속, 인터페이스, 다형성, 캐스팅 등을 공부했습니다.
2. 객체 지향 프로그래밍에 대해 깊이 공부하는 데에도 많은 시간이 들었습니다. '객체지향의 사실과 오해'라는 책과 여러 온라인 자료들을 참고했습니다.
3. 절차 지향 코드를 객체 지향으로 변환하는 작업에 시간을 많이 투자했습니다. 특히 각 클래스의 책임을 어떻게 나눌지 고민하며 구조를 설계하는 과정이 시간이 많이 소요되었습니다.
[ 마치며 ]
이렇게 1주차 과제에서 의도하는 학습 목표를 달성하고, Java와 객체지향에 대해 공부를 할 수 있었습니다.
지금까지는 객체 지향 설계가 이렇게 아름다운 것인지 몰랐는데, 앞으로 있을 심도 깊은 학습들이 기대되는 시간이었습니다.
'우아한테크코스' 카테고리의 다른 글
[우아한테크코스 7기] 최종 합격 (0) | 2025.01.01 |
---|---|
[우아한테크코스 7기] 1차 합격 및 최종 테스트 회고 (3) | 2024.12.19 |
[우아한테크코스 7기] 프리코스 4주차 및 종료 회고록 (1) | 2024.11.16 |
[우아한테크코스 7기] 프리코스 3주차 회고록 (1) | 2024.11.06 |
[우아한테크코스 7기] 프리코스 2주차 회고록 (0) | 2024.10.29 |