[TIL] 15일차 _ 키오스크 프로젝트 #3

Seoyeon Lee·2025년 10월 24일

Today I Learned ...

오늘은 코드카타 알고리즘 10~12번 문제와 SQL 12번 문제를 풀고, 키오스크 프로젝트의 Lv.5를 완성했다.


🗒️ 코드카타 #8

오늘 진행한 SQL 문제where ... like를 사용해서 특정 문자를 포함된 이름을 찾는 내용이었다.
이때, 조건으로 이름의 대소문자를 구분하지 말라고 되어있는데, 이를 위해 이름 필드를 upper(animal_name)으로 대문자로 바꿔주고, like의 조건으로도 upper('%el%')로 대문자를 지정해주었다.
나는 대문자로 바꾸어 찾기를 시도했지만, lower()을 통해 모두 소문자로 바꾼 뒤 진행할 수도 있고,
PostgreSQL등의 DB에서는 대소문자를 구분하지 않기 위해 ilike 연산자를 지원해준다고 한다.

그리고 오늘은 총 3개의 알고리즘 문제를 풀었는데, 그 중 2개는 배열의 평균값을 구하는 문제였다.
for문을 통해 배열을 순회하는 방법과 Stream을 활용한 방법 2가지로 풀 수 있었다.
for문을 사용할 때는 전체의 합계를 구한 뒤에 배열의 length로 나누어서 구했는데,
나는 double로 반환시키려면 분모와 분자 모두 double이어야하는 줄 알았는데,
분모와 분자 중 하나만 double이고, 나머지가 int면 컴파일러가 알아서 int를 double로 승격시켜 계산한다고 한다.

각각의 문제와 풀이는 깃허브를 통해 업로드해두었다.
GitHub 보러가기


🖥️ 키오스크 프로젝트 #3

오늘은 키오스크 프로젝트의 Lv.5를 진행했다!

Lv.5의 요구사항은 MenuItem, Menu, Kiosk 클래스의 필드에 직접 접근하지 못하도록 캡슐화를 적용하는 것이다.

사실 Kiosk 클래스에는 메서드만 만들어두었기에 따로 수정할 부분이 없었고,
MenuItem 클래스 또한 필드에 직접 접근할 일이 없었기에 크게 수정할 부분은 없었다.
그저 MenuItem() {}의 기본 생성자를 추가하고, setter를 추가해 추후에 메뉴를 등록하는 내용을 만들 때 사용하려고 한다.

이제 문제는 Menu 클래스이다.
Menu 클래스에는 MenuItem을 관리하는 리스트 컬렉션이 존재하는데, 이걸 private으로 바꾸니 Kiosk 클래스에서 컬렉션을 다루기가 까다로워졌다.
그런데 사실 이것도 getter를 만들어서 컬렉션을 지정해줬던 부분들을 모두 getter로 바꿔주면 해결되는 문제였다.

Lv.5의 캡슐화는 이렇게 간단하게 해결할 수 있었다.
그래서 캡슐화 구현을 마친 후에는 코드 리팩토링을 했다.
이런저런 메서드를 만들다보니 겹치는 역할을 하는 부분이 있기도 했고,
Kiosk의 start() 메서드는 너무 길고, 변수에 이름을 적는 것이 아니라 변수의 메서드의 메서드의 메서드로 관리하다보니 수정을 하려고 해도 알아볼 수가 없었다.
그래서 start() 메서드에 각각의 주석을 정리해두었다.

오늘 실시간 세션을 통해 객체간의 결합도에 대해 배웠는데, 내가 구현한 것들은 결합도가 너무 강한 것 같다.
그래서 하나의 클래스를 캡슐화시키려고 해도 2, 3개의 클래스를 건드려야만 했다.
그런데 아직은 어떻게 하면 이걸 느슨하게 만들 수 있을지 모르겠다.
이 부분에 대해서는 계속 고민을 해봐야겠다.

내가 작성한 코드는 깃허브에 업로드해두었다.
GitHub 보러가기


🙃 오늘의 느낀점

그래도 어제 Lv.4에서 깔끔하게 코드를 정리해둔 덕에 오늘 Lv.5 내용은 비교적 간편하게 해결할 수 있었다.
중간에 필요없는 짓을 좀 하긴했지만... 그래도 오늘은 나름 똑똑한 하루를 산 것 같다.

이제 키오스크 과제의 필수 구현 부분은 끝냈고, 다음주부터는 도전 과제를 시작하게 된다.
사실 앞선 계산기 프로젝트의 트러블 슈팅을 안 끝내서... 그것도 끝내야 한다.
아직 갈 길은 멀지만, 그래도 전에 비해 많이 똑똑해진 것 같아서 매우 만족한다.
앞으로도 열심히 하자,,

profile
백엔드 개발자 지망생

0개의 댓글