본문 바로가기

Study

계산기

Kotlin 내일배움캠프 2주차가 지났다. 2주차에는 Kotlin 언어의 문법과 객체지향 개념에 대한 강의가 주어졌고, 이를 들으면서 계산기 과제를 수행하도록 커리큘럼이 구성되어 있었다. 이에 계산기 과제를 일찍 끝낸 인원들에 대해 추가로 호텔 예약 시스템 과제가 제공되었다. 2주차 목표는 당연히 호텔 예약 시스템까지 구현하는 것이었다. 그렇지만 계산기를 계속 리팩토링하며 시간을 쓰다 보니, 호텔 예약 과제는 시작도 못하고 2주차가 마무리되었다. 다음 주 커리큘럼 진행을 보고 시간 여유가 된다면 틈틈이 구현해서 피드백까지 받아볼 기회가 있으면 좋겠다.

 

계산기

계산기 과제는 사실 최근에 채용 과제로 제출한 적이 있었기 때문에, 어렵진 않을것으로 생각했다. 그때도 객체지향적인 설계가 요구사항이었기 때문에, 있는지식 없는지식 다 동원해서 객체지향적인 코드를 만드려고 노력했던 것 같다. 이번 과제도 구현하다 보니 후위표현식으로 스택까지 사용하도록 구현했는데, 그러다 보니 저번 과제와 비슷한 형태로 만들어졌다. 그러나 내 코드에서 어떤 부분이 객체지향적인 설계인지도 모르고 무분별하게 모듈을 나누고 인터페이스를 사용한 것 같다는 생각이 들어, 이 부분을 중점적으로 튜터님들에게 피드백을 받고자 했다. 그래서 다음과 같은 고민했던 부분 

  • 패키지 구조 및 패키지, 클래스 네이밍
  • 각 역할을 하는 클래스가 어디에 위치할 것인지
  • 인터페이스의 사용이 과한 부분은 없는지
  • 각 클래스에서 자신의 역할이 명확히 분리되어 있고, 최소한의 책임만 갖고 있는지

을 정리해서 피드백을 두 차례 받고, 궁금했던 부분 외에 부족한 부분(코드 가독성, 코틀린 문법의 응용, 커밋 단위)에 대한 피드백을 추가로 받으면서 그 내용으로 리팩토링을 거쳤다. 그 결과로 조금은 깔끔해진 계산기를 제출하게 됐고, 각 패키지와 클래스의 위치, 이름 등 설계적인 측면에서도 납득할 수 있는(이유를 설명할 수 있는) 코드가 됐다고 생각이 들어 만족스러웠다. 그럼에도 조금 고민인 것은 언제 스스로 좋은 설계를 할 수 있게될까에 대한 부분인데, 이건 경험이 필요한 부분이라고도 생각되고 주관이 많이 반영되는 부분이기 때문에 일단 코드 경험이 많이 생겨야 한다고 생각한다.

 

회고

부족했던 것들이 참 많이 드러난 주차였다. 가장 크게 느껴진 것은 계획한 것을 계획대로 실천하지 못한 부분이라고 생각한다. 크게는 주간 목표를 호텔 예약 과제를 마무리하는 것까지로 잡았는데, 계산기를 너무 오래 붙잡고 있느라 결국 시작하지 못했다. 리팩토링을 계속 하면서 '새로운 과제를 하나 더 하는것보다 계산기 하나라도 제대로 해 보는것' 이 중요하다는 생각으로 계속 바뀌면서 점점 호텔 과제까지 마무리해야된다는 목표가 희미해졌고, 결국 지키지 못했다. 어떻게든 끝내겠다는 생각이었으면 밤을 새서라도 불완전하게라도 제출 할 수 있었겠지만 그렇게까지 확실한 목표의식이 없어서 실천하지 못한 것 같다.
또 작게는 매일 알고리즘 문제 또는 SQL 문제를 하나씩이라도 시작하는 계획을 잡았는데, 처음부터 '시간 남으면 풀어보자' 는 생각으로 임해서인지 한주동안 한 문제도 풀지 않았다(...). 알고리즘과 SQL 을 익히는것도 정말 중요해서, 지금부터 하루 한문제씩이라도 푸는 습관을 들이면 나중에 큰 자산이 될 것이다. 적어도 어려운 문제라도 주에 알고리즘 한문제 SQL 한 문제는 반드시 풀어야 한다는 제약을 걸어야겠다. 
팀원들과의 소통, 협업도 잘 되었는지 모르겠다. 팀장이랍시고 팀원들끼리 매일 목표를 공유하는 시간, 하루를 회고하는 시간을 마련해  대화하는 시간을 가졌지만, 매일 목표한만큼 다 채우진 못했다는 짧은 말로 마무리한 건 아닌지 반성하게 된다. 그래도 대화할 시간을 마련해 놓으니 그 시간에 공부한 내용을 공유하려는 팀원들도 있었고, 각자 과제 진행에 대해서도 서로 피드백을 주고받는 과정도 있었어서 좋았다는 생각이 든다. 
그 밖에 코드와 설계 등 많은 부분에서 부족함이 많았던 것 같다. 그런 부분은 천천히 개선시킬 수 있는 것이라 생각하지만, 지금 고칠 수 있는 문제들은 최대한 고쳐나가려는 노력을 해야겠다. 

 

'Study' 카테고리의 다른 글

숫자야구  (0) 2024.05.07
스레드(Thread)  (0) 2024.05.01
직렬화(Serialization) 와 역직렬화(Deserialization)  (0) 2024.04.26
트랜잭션 격리 수준(Isolation Level)과 동시성 제어  (2) 2024.04.26
트랜잭션의 개념과 사용  (0) 2024.04.11