Today's Codekata
class Solution {
public long[] solution(int x, int n) {
long[] answer = new long[n];
for(int i = 0; i < n; i++) {
answer[i] = (long) x * (i + 1);
}
return answer;
}
} // 에러 메시지를 최대한 읽어보려 노력했더니, 무엇무엇이 잘못됐는지 이해하고 수정하면서 답을 찾을 수 있었다.
class Solution {
public int[] solution(long n) {
int len = String.valueOf(n).length();
int[] answer = new int[len];
for (int i = 0; i < len; i++) {
answer[i] = (int) (n % 10);
n = n / 10;
}
return answer;
}
} // (int) n % 10; 이라고 했을 때 우선순위 문제로 괄호로 감싸 % 연산을 먼저 진행하니 에러가 사라졌다.
// valueOf() 는 Java에서 기본 타입을 객체로 바꾸거나 객체를 문자열로 변환할 때 자주 쓰이는 메서드이다.
Today I Learned
public class Main {
public static void main(String[] args) {
List<Menu> mainMenu = new ArrayList<>();
Menu burgers = new Menu("Burgers");
Menu drinks = new Menu("Drinks");
Menu desserts = new Menu("Desserts");
mainMenu.add(burgers);
mainMenu.add(drinks);
mainMenu.add(desserts);
List<MenuItem> menuItems = new ArrayList<>();
MenuItem firstMenu = new MenuItem("ShackBurger",6.9,"토마토, 양상추, 쉑소스가 토핑된 치즈버거");
MenuItem secondMenu = new MenuItem("SmokeShack",8.9,"베이컨 체리 페퍼에 쉑소스가 토핑된 치즈버거");
MenuItem thirdMenu = new MenuItem("Cheeseburger",6.9,"포테이토 번과 비프패티, 치즈가 토핑된 치즈버거");
MenuItem fourthMenu = new MenuItem("Hamburger",5.4,"비프패티를 기반으로 야채가 들어간 기본버거");
menuItems.add(firstMenu);
menuItems.add(secondMenu);
menuItems.add(thirdMenu);
menuItems.add(fourthMenu);
Kiosk kiosk = new Kiosk(mainMenu, menuItems);
try {
kiosk.start();
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
}
public class Kiosk { // 키오스크 프로그램의 메뉴를 관리하고 사용자 입력을 처리하는 클래스
private final List<Menu> mainMenu;
private final List<MenuItem> menuItems;
public Kiosk(List<Menu> mainMenu, List<MenuItem> menuItems) {
this.mainMenu = mainMenu;
this.menuItems = menuItems;
}
public void start() {
.....

현재 이런식으로 mainMenu 리스트와 menuItems 리스트를 따로 만들어서 콘솔에서 잘 작동하도록 구현은 해냈는데, 이 구조를 Menu 클래스가 관리하도록 변경하는 부분에서 막막함을 느끼고 있다. main()에서 객체를 만들고 기능을 호출하는 흐름은 어느 정도 감을 잡았지만, 클래스 간의 구조는 아직 이해가 좀 더 필요해보인다.
public class Menu {
String category;
List<MenuItem> menuItems = new ArrayList<>();
public Menu(String category) {
this.category = category;
}
public void addMenuItem(MenuItem menuItem) {
this.menuItems.add(menuItem);
}
}
Menu burgers = new Menu("Burgers");
MenuItem shackBurger = new MenuItem("ShackBurger",6.9,"토마토, 양상추, 쉑소스가 토핑된 치즈버거");
burgers.addMenuItem(shackBurger); // burgers 안에 shackBurger를 담아냈다!
Kiosk에 있던 MenuItem 리스트를 가져오고 Menu 안에 MenuItem을 담는 것이 가능하다는 걸 알게 되었다. List 안에 List를 담을 수 있다는 걸 생각치 못 했는데 그것이 가능하다는 걸 알게 되니까 길이 조금씩 보였다. 현재 Kiosk 클래스 안에는 중복되는 코드들이 즐비한데, 이것들을 메서드화해서 재사용이 가능하게 만들거나 뭔가 다른 방식이 필요해보인다. 오늘은 OOP 즉 객체 지향 프로그래밍(Object-Oriented Programming)이 어떤 의미인지를 조금이나마 알게되는 시간이었다. 내가 공부하고 이해한 만큼 더 많은 것들이 코드 속에서 보여지는 것 같다.