Skip to content

[자판기] 김용래 미션 제출합니다.#21

Closed
usageness wants to merge 30 commits into
woowacourse:mainfrom
usageness:usageness
Closed

[자판기] 김용래 미션 제출합니다.#21
usageness wants to merge 30 commits into
woowacourse:mainfrom
usageness:usageness

Conversation

@usageness
Copy link
Copy Markdown

안녕하세요 😊 프리코스 3주차 미션 제출합니다.

지난 3주는 제게 있어 정말 많은 것을 배우고, 느낀 시간이었습니다. 새로운 미션들을 진행하며 이전에는 몰랐던 지식들을 배워가는 과정이 너무나도 즐거워 하나하나 기억을 더듬어가며 모두 적고 싶지만, 그 중에서도 크게 기억에 남았던 내용들만 간단히 정리해보았습니다.

모듈화 & 코드 분리

1주차와 2주차를 진행하며 중점을 두었던 공통 관심사는 어떻게 해야 읽기 좋은 코드를 짤 수 있을까? 였습니다. 함수의 인덴트를 제한하고, 길이가 15줄을 넘지 않도록 작성하는 것처럼 너무 길지 않고, 한 번에 하나의 역할만 수행할 수 있는 코드를 짜기 위해 노력했습니다.

여기에 리팩토링과 같은 책과 웹상에 공개된 글들을 바탕으로 더 좋은 이름, 더 좋은 구조를 가진 코드로 바꾸려 많은 고민을 했던 기억이 있네요. 비록 고민했던 시간만큼 훌륭한 코드가 나오지는 않아 아쉽지만 이러한 고민을 하게 된 시간 자체로도 많은 도움이 되었다고 생각합니다.

처음 해보는 스타일의 코딩인만큼 아쉬운 부분들도 많았지만, 다른 분들의 코드를 보면서 보다 넓은 관점을 갖게 된 것 같아 소중한 시간이었습니다.

바닐라 자바스크립트의 응용과 구조

그동안 프로젝트를 진행할 때, 규모가 커질 것이라는 예상이 들면 처음부터 프레임워크나 라이브러리에 의존하는 성향이 있었습니다. CRA 명령어를 사용하면 전체적인 프로젝트의 구조나 진행 방향들을 미리 구성해주다보니 처음부터 쌓아 올리는 것에 대한 막연한 부담감이 있었습니다.

이번 3주차 미션을 진행하며 가장 크게 느꼈던 어려움이 바로 이런 구조에 대한 부분이었습니다. 바닐라 자바스크립트만으로 구조를 세우고 그 위에 살을 덧붙여나가는 과정이 어색하게 다가왔고, 결국 어느정도 진행되고나니 처음부터 다시 만들지 않는 이상 손 쓰기 어려울 정도로 구조가 복잡해진 것을 알게 되었습니다.

최대한의 리팩토링을 통해 요구사항은 맞추었지만 더 좋은 구조를 만들 수 있었을텐데 그러지 못한 점이 내내 아쉬움으로 남습니다.

도전

다른 분들의 코드를 살펴보며 꽤 많은 분들이 HTML 요소를 동적으로 생성해서 사용하시는 것을 알게되었습니다. 그동안 문자열로 생성하여 innerHTML 태그와 같이 사용하던터라 이번 미션엔 이러한 방식을 적용해야겠다고 생각하고 있었는데, 실제로 이번 미션에 적용해보고나니 이것도 최선의 방법은 아니었다는 느낌을 받았습니다.

다만 이미 너무 많이 진행해온터라 처음부터 다시 만드는 방법을 선택하기보다는 주어진 상황을 최대한 깔끔하게 정리하는 쪽으로 방향을 잡고 생성 로직을 분리하여 설계해보았습니다. 아쉽게도 이것은 근본적인 해결책은 되지 못했다는 생각이 듭니다.


총평

지금까지 진행했던 미션 중 가장 규모가 큰 미션이었습니다. 메일에서 극단적이라고 표현하셨던 부분이 어떤 의미로 하신 말씀였는지 미션을 끝내고 나니 조금은 알 것 같습니다. 최종 테스트 전 마지막 미션까지 재미있는 미션 준비해주신 우아한테크코스 운영팀분들께 다시 한 번 감사하다는 말씀 드리고 싶습니다. 최종 테스트도 잘 부탁드리겠습니다!

- 탭 메뉴 요소를 생성하였습니다.
- 각 섹션이 표시될 컨테이너 생성
- 상품 관리 <-> 상품 구매 이름 변경
- 상품 관리 화면을 추가하는 buildProductAdd.js  파일을 추가
- 추가하기 버튼을 누르면 Product 객체를  ProductList 객체에 담아 추가 가능
- 너무 길었던 DOM 요소 생성 코드를  별개의 유틸 함수로 분리하여 가독성  향상
- 추가하기 버튼을 누르면 상품 현황의  요소를 최신화
- 잔돈 충전 화면을 보여줄 buildChargePage  생성
- tabMenu에서 페이지 이동 추가
- 동전 개수를 출력하는 행을 만들  createTableRow 함수 생성
- 입력 요소에 금액을 입력 후 버튼을  누르면 금액이 충전된다.
- 충전한 금액은  vendingMachine에 저장된다
- 파일 간 통일성을 위해 이름 변경
- MissonUtil의 Random.pickNumberInList를 사용해 무작위  동전 생성 후 누적
- 사용자가 동전을 충전시 자판기가  보유한 동전 업데이트
- 상품 구매 화면을 생성하고, 탭 메뉴의  버튼을 통해 연결
- VendingMachine 객체에서 사용자가 투입한  금액을 함께 관리
- VendingMachine에 반환 관련 메서드 추가
- buildPurchasePage에서 호출 후 적용
- 구매 시 VendingMachine, ProductList 객체에 모두  접근하여 데이터 처리
- 값들을 TEXT, MSG, NUMBER로 나누어 상수화
@woowapark woowapark closed this Feb 15, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants