
이번 주에는 자바 미니 프로젝트를 진행하며, 우리나라 길에 대한 공공 데이터를 활용하여 최적화된 길을 추천하는 서비스를 구현했습니다. 다양한 기능들을 구현하면서 객체 지향 프로그래밍(OOP)을 적용하려 했지만, 생각보다 OOP를 고려하며 구현하는 것은 매우 어려웠습니다. 그리고 원초적으로 돌아가서 왜 자바를 사용할 때 OOP에 맞게 구현해야 하는지 그 맥락에 대한 궁금증이 생겼고, 이에 대한 자세한 내용은 다른 포스팅에서 정리하였습니다.
저는 해당 글을 정리하는 과정에서 객체 지향 프로그래밍 방법론에 따라 프로젝트를 설계하는 것이 얼마나 중요한지 그 중요성에 깨닫게 되었고, 지금은 단순 미니 프로젝트를 구현하는 것이기 때문에 OOP를 적용하는 것은 오히려 비효율적이고 개발 기간만 늘리는 고리타분한 방법론이지만, 이 방법론은 기본적으로 규모가 큰 앱의 기반으로 하는 방법론이라는 것을 깨닫게 되면서 앞으로 큰 규모의 앱을 운영하고 개발하기 위해선 객체 지향 프로그래밍 방법에 대한 개념을 더 잘 알고, 이것을 구현하는 방법을 제대로 아는 것이 중요하다는 것을 깨닫게 되는 기회였습니다.
SOLID 원칙과 디자인 패턴의 적용
그리고 저는 수업에서 들은 SOLID 원칙과 디자인 패턴도 적용하여 구현하려 했지만, 이 역시도 쉽지 않은 과정이었습니다. 그리고 이 과정은 단지 개념 이해뿐만 아니라 경험이 쌓여야만 어떠한 특정 환경에서 어떠한 특정 패턴이나 원칙을 적용하는 것이 자연스러워질 수 있단 생각이 들어 최대한 많은 프로젝트를 진행해봐야겠다는 생각을 하게 되었습니다.
디버깅과 TDD의 중요성
그리고 코드가 많이지면 많아질수록 디버깅하는 것이 어려웠고, 어디서 에러가 나는지 찾아가는 과정이 시간도 오래 걸리고 비용이 커진다는 것을 깨닫게 되었습니다. 그래서 TDD 개발 방법론에 따라 개발 초기부터 유닛별로 테스트를 통해 프로젝트를 하나씩 쌓아가는 과정의 중요성도 깨닫게 되었습니다.
클린 코드 작성의 중요성
그리고 저는 지금 '클린 코드' 책을 읽으면서 협업시 중요한 요소들에 대해 이해하고 적용해보려고 노력하고 있는데요. 그 일환으로 주석도 달고 이름도 업무와 관련된 직관적인 이름을 쓰려고 노력했습니다. 처음에는 추가적인 작업이 많아져서 그만할까 싶었지만, 스스로도 일주일 뒤의 코드를 읽으면 까먹게 되고, 주석을 보며 바로 이해할 수 있는 걸 보면서 주석의 중요성과 이름의 중요성을 다시금 깨닫게 되었습니다.
SQLD 시험 준비
또한 저는 이번 주에 SQLD 시험을 같이 준비해야 했었는데요...ㅠㅠ 데이터베이스 수업 시간에 배웠던 개념뿐만 아니라 다양한 함수들과 복잡한 관계들을 해석하는 것이 정말 어려웠는데요. 다행히도 시험 문제는 그렇게 어렵지 않아서 합격할 수 있지 않을까 하는 기대를 품고 있습니다.
점점 공부할 내용이 많아지고 복잡도와 난이도가 높아지고 있습니다. 또한 이전에 학습한 내용들이 점점 까먹으면서 복습의 중요성을 많이 느끼고 있습니다. 이를 해결하기 위해선 계획을 더 세세하게 세워야겠단 생각을 하게 되었습니다. 제가 해야 되는 것들을 더 이상 큰 단위로 관리하기엔 힘들다는 생각이 들었고, 더 작은 단위로 나누니깐 오히려 단계별로 순차적으로 빼먹지 않고 필요한 것들을 챙길 수 있어 해야 할 일들의 복잡도가 낮아지는 것을 확인할 수 있었습니다. 그리고 알고리즘 같은 것들도 하나하나 코드적으로 접근하면 어려운데, 이것을 여러 맥락으로 나눠서 조금씩 구현한 것을 합친다고 생각하고 분할적으로 접근하니 문제가 쉬워지는 것을 확인할 수 있었습니다.
OOP 개념 심화 학습
앞으로는 객체 지향 설계를 더 잘 이해하고, 실제 대규모 프로젝트에서 이를 어떻게 적용할 수 있을지 고민할 것입니다. 객체 간의 관계 설정과 클래스 설계에서 발생할 수 있는 문제들을 해결할 수 있도록 더 많은 연습을 할 계획입니다.
SOLID 원칙과 디자인 패턴 적용
다양한 프로젝트에서 SOLID 원칙과 디자인 패턴을 실제로 적용해보며, 각 상황에 맞는 원칙과 패턴을 자연스럽게 적용할 수 있는 능력을 기를 것입니다.
TDD 실천
테스트 주도 개발(TDD)을 실천하여, 코드 품질을 높이고, 개발 초기부터 발생할 수 있는 문제들을 미리 예방할 수 있도록 하겠습니다. 각 기능을 구현할 때마다 유닛 테스트를 작성하고, 점진적으로 프로젝트를 구축해 나갈 계획입니다.
클린 코드 작성 강화
주석 달기와 직관적인 변수명 사용을 습관화하여, 코드의 가독성과 유지보수성을 높이겠습니다. 협업을 고려하여 팀원들과의 원활한 소통을 위해 클린 코드 작성의 중요성을 계속 실천할 것입니다.
SQLD 관련 지식 심화
SQLD 시험 준비를 통해 배운 데이터베이스 설계와 쿼리 최적화에 대한 내용을 심화하여 학습하고, 실제 프로젝트에서 데이터베이스 설계를 보다 효율적으로 할 수 있도록 노력할 것입니다.