오늘은 코드카타 알고리즘 6번 문제와 SQL 6~10번 문제를 풀고, 키오스크 프로젝트를 시작하였다.
오늘은 SQL 문제를 많이 풀었다.
초반에 있는 문제들은 간단한 문제들이고, 사전캠프에서 다루었던 내용이었기에 빠르게 해결할 수 있었다.
그러던 중에 새로운 사실을 알게 되었는데, having은 반드시 order by 전에 작성해야 한다는 것이다.
사전캠프에서 문제를 풀면서는 having과 order by를 함께 사용할 일이 없어서 몰랐는데,
order by를 작성한 후에 having을 사용하려고 하니 실행이 되지 않았다.
앞선 TIL에서 컴퓨터가 SQL문을 실행하는 순서에 대해 다룬 적이 있는데,
from → where → group by → having → select → order by(+ limit)
위와 같은 순서로 실행한다.
그렇기 때문에 SQL문을 작성할 때에도 select → from → where → group by → having → order by의 순서를 지켜야하는 것이다.
오늘 진행한 알고리즘 문제는 제한 범위 이내의 두 수를 입력받고, 두 수의 합을 구하는 것이었다.
앞서 다뤘던 내용들과 비슷해서 큰 어려움 없이 해결할 수 있었다.
각각의 문제와 풀이는 깃허브를 통해 업로드해두었다.
GitHub 보러가기
오늘부터 새롭게 키오스크 프로젝트가 시작되었다!
사실 아직 계산기 프로젝트의 트러블슈팅을 다 끝내지 못했지만... 일단은 새로운걸 시작해보려고 한다.
키오스크 프로젝트는 총 7단계로 구성되어 있는데, 1~5단계는 필수 구현 과제, 6~7단계는 도전 과제이다.
1단계로 메뉴를 출력하고, 주문 번호를 입력하면 해당 메뉴를 출력하는 것부터
7단계로 장바구니와 주문 내용을 관리하는 것까지 구성이 되어있다.
오늘은 이 중 1, 2, 3단계 구현을 완성했다.
앞서 설명한 것처럼 1단계는 메뉴를 출력하고, 주문 번호를 입력하면 해당 메뉴를 출력하고, 숫자 0을 입력하면 프로그램을 종료시키는 것이다.
while문 안에서 주문 번호를 입력받고, 주문 번호를 switch-case로 구분해서 사용했다.
숫자 0을 입력받았을 때 switch문과 while문 모두 빠져나오도록 하고 싶었는데, break를 걸어도 switch문에서만 빠져나온다는 한계가 있었다.
그래서 이 해결책으로 boolean을 새롭게 설정하고, while문의 조건으로 true값인 boolean을 넣어준 뒤, 숫자 0을 받았을 때 boolean을 false로 바꿔주었다.
이 외에는 특별한 문제 없이 해결할 수 있었다.
2단계는 음식 항목을 관리하는 MenuItem 클래스와 메뉴를 출력하고, 주문 번호을 입력받고, 숫자별로 처리를 해주는 Main 클래스로 구분해주는 것이다.
Main 클래스에는 메뉴를 담는 리스트 컬렉션을 생성해서, 리스트 컬렉션의 add() 메서드를 통해 메뉴를 컬렉션 안에 저장해주었다.
컬렉션 전체를 출력하기 위해서는 for문을 사용해 컬렉션 안을 순회하며 프린트를 해주면 되었다.
마지막으로 3단계는 2단계 내용에 추가해 Kiosk 컬렉션을 만드는 것이다.
Kiosk 컬렉션에는 2단계 Main 클래스에서 사용한 리스트 컬렉션을 옮겨서 Kiosk 생성자를 통해 객체들을 해당 컬렉션 안에 저장해주게 하였다.
그리고 메뉴를 출력하고, 숫자를 입력받고, 숫자별로 처리해주는 내용들을 모두 start() 메서드로 묶어주었다.
그래서 Main 함수에서는 MenuItem의 객체를 생성하고, Kiosk로 객체를 저장하고, start() 메서드를 실행시켜주기만 하면 되었다.
사실, 3단계를 진행하면서는 문제의 요구사항을 잘못 이해해서... MenuItem의 객체 생성까지 Kiosk 생성자 안에서 해결되도록 만들었었다.
사실 이렇게 해도 어찌저찌 프로그램이 돌아가기는 하지만,,, MenuItem의 객체를 몇개 생성할지를 알 수 없어 생성자를 만들기에 애를 먹었다.
근데 다른 사람들은 어떻게 해결했는지를 구경하다가 내가 문제를 잘못 이해했음을 깨달았고... 원래의 요구사항대로 잘 해결하게 되었다.
오늘 4단계까지 구현하고자 했으나 4단계 구현에 실패했기 때문에 4단계에 대한 내용은 내일 정리해야겠다.
내가 작성한 코드는 깃허브에 업로드해두었다.
GitHub 보러가기
요즘 문해력이 참 많이 떨어졌다...
문제 이해를 잘못해서 이상하게 구현한건 3단계에서 뿐이었지만... 1, 2, 3, 4단계 모두 문제 이해가 잘 되지 않아 한참을 생각해야만 했다.
다른 사람들의 깃허브를 구경하다가 프로젝트별로 플로우차트를 그려놓은 사람을 보았다.
그래서 나도 지난 계산기 프로젝트부터 플로우차트를 그리기 시작했는데,
도저히 코드를 구현하기 전에 플로우차트를 그리지는 못하겠다.
지금은 코드를 완성해두고, 완성된 코드를 플로우차트로 정리하고 있다.
언젠가 문제를 보면서 어디에 어떤 명령들을 작업해야할지 그림을 그릴 수 있게 되기를 바란다.