Calculator 관련 글 모아보기 (최신순)
또는 좌측 태그 목록에서 Project_Caculator
을 눌러보세요!
Project: Calculator
Swift 문법을 배우기 위해 시작한 Calculator 만들기 과제.. playground로 만들어서 UI도 없고 콘솔로도 접근할 수 없다. 하지만 Swift 문법 강의를 듣는 데 있어 의욕을 많이 불어넣어준 고마운 프로젝트이다.
개발 과정
- git repository 생성 및 .gitignore 파일 설정 (git의 template 이용함)
- 사칙연산 및 결과 출력 수행하는 Calculator 클래스 구현 + 나머지 연산 기능 구현
- 각 연산을 별도 클래스로 분리 (클래스의 단일책임원칙)
- 예외처리 기능 구현
- 연산 클래스들을 ArithmeticOperations.swift 파일로 묶어 분리 (public 접근제한자)
- 연산 클래스에 채택할 프로토콜 구현
- Calculator 클래스에 연산 클래스가 적용되는 방식을 프로토콜로 처리함
( 클래스의 의존성역전원칙 / 객체지향 프로그래밍의 추상화, 캡슐화 적용 )
- Calculator 클래스, 연산 클래스, 연산 프로토콜을 모두 각 파일로 분리함
인사이트
- 실시간으로 강의에서 배운 내용을 과제에 적용하다 보니까, 다음 스텝으로 가기 위해 필요한 다음 학습내용을 파악하는 게 중요했다. 이 파악하는 과정에서 고민하는 시간이 꽤나 값어치가 있었던 것 같다. 결국 내가 "모르는 것을 아는 것이 앎의 시작"이니.. 다음 학습내용을 파악하고 나면 그 내용까지 도달하기까지의 수강 모티베이션이 배가 되었다. 역시 공부는 문제 해결과 병행되었을 때 효과적이다.
- 팀원들과 고민을 공유하며 나눈 얘기도 무척 생산적이었다! 특히 내가 생각치도 못했던 관점이 나왔을 때는 매우 신선했고, 여러 사람의 의견을 들으면서 '비슷한 고민을 하고 있구나' 라던가, '나만 이 부분이 난해한 게 아니구나' 하는 공감도 많이 도움되었다. 더군다나 서로 간에 지식이 전달되면서 자연스럽게 그 지식이 다시 확인되고, 정제되고, 소화되는 과정이 무척 매력적이었다.
- AI: ChatGPT를 활용하는 방식도 되돌아보게 되었다. 일차원적으로 의지했다면 그냥 'playground로 계산기 만들어줘'라고 했겠지만, 최대한 스스로 개발을 진행하면서 부딪히는 문제(이해가 되지 않는 오류 메시지)나 처음 보는 난해한 개념들(클래스 간의 관계, 클래스의 SOLID 원칙 등) 위주로 물어보았다. 코드 평가도 반복적으로 부탁했는데, 좋은 점과 개선할 점을 함께 물어보았고, 답변으로 돌아온 개선점에 대한 이유도 궁금하면 바로 물어봤다. ChatGPT가 답하는 내용을 파고들어 계속 물어보다 보면, 문법에 대한 전반적인 이해뿐만 아니라 구체적이고 깊은 내용에 대한 이해도 함께 챙길 수 있어서 좋았다.
- Xcode에 탑재되어있는
Predictive code completion
마저도 너무 도움을 받는 것 같아서 잠시 기능을 끄고 개발했다. 자동 완성이 너무 우수해서, 내가 고민하기도 전에 답을 내어버리니 사고회로가 무뎌지는 느낌이 들었기 때문이다.
- 모든 문서를 전부 영어로 작성하기로 도전했는데 생각보다 무척 어려웠다. 단순히 의미를 전달하는 것만이라면 비교적 쉬웠겠지만 커밋 메시지나 PR, 주석 등은 모두 간결하면서도 명확하게 표현하는 게 포인트이다. 적절한 단어를 생각해내는 것이 종종 어려워서, 이 부분에 대해서도 ChatGPT의 도움을 많이 받았다. 좋은 예시가 있다면 어떻게 PR이나 commit message를 작성하고 주석은 어떤 식으로 쓰는지 눈여겨 봐야겠다.
Pull Requests
과제로 제출하기까지 총 4번의 Pull Request가 있었는데, 여기에 모두 나열해보고자 한다. 커밋은 메시지 적는 게 그리 귀찮지 않았는데 Pull Request는 작성하는 게 매우매우 귀찮았다. '그냥 커밋들을 쭉 훑어보면 안되나?' 싶었지만 막상 내가 한 커밋들임에도 중구난방이라서 한 눈에 파악하기 어려웠다. 혼자서 진행하는 데 이 정도면 팀 프로젝트에서는 더욱 중요하겠지.. 한편으로는 내가 커밋을 너무 두서 없이 하는 건지 걱정이 들기도 한다. 아무튼, 다음엔 PR도 적절한 컨벤션을 참고해서 일관성 있게 적용해봐야겠다.
(스크롤 주의: 이 뒤로는 각 PR의 스크린샷만 있고 별도의 글은 없습니다)
Added operations / updated README #1
DisplayResult updated / Exception Handling / Separated ArithmeticOperations.swift #2
Organized main components to separate files / Comments organized + TODO #4