230531_ 개인 과제

hoy_·2023년 5월 31일
0

Today, I Learned

목록 보기
10/36

1. 오늘의 일정

  1. 어제 겪었던 오류 해결 및 기능적 보완

  2. 알고리즘 풀이




2. 배운 내용

  1. 리스트를 생성할 때 원소의 값을 하나만 전달한다면 Arrays.asList보다 Collections.singletonList을 추천하는 이유.

  • Arrays.asList > Arrays.asListArrays 내부에 구현된 ArrayList를 생성해서 반환한다. 값을 변경할 수는 있지만 List의 크기를 변경하는 메서드를 오버라이드 하지 않는다. 즉, 크기가 고정되어있어 addremove호출 시 UnsupportedOperationException이 발생한다.


  • Collections.singletonList > Collections의 내부 클래스인 SingletonList를 생성해서 반환한다. 지정된 단일 객체를 가르키는 주솟값을 가지기 때문에 불변으로 크기가 1로 고정되어 있어 수정 또한 불가능하다. 원소를 하나만 전달했을 시 메모리를 더 효율적으로 사용하므로 Collections.singletonList를 사용할 것을 권장한다.
    값 및 구조적 변경 시 UnsupportedOperationException이 발생한다.




3. 발생한 오류

  1. 어제의 연장선으로 어떻게든 장바구니에 담은 메뉴의 총액을 구하는데 성공했다. 원래 하고 싶었던 .get().get()의 방식을 사용하진 못했고, 리스트의 요소를 String으로 변환한 후 .split()으로 원하는 값만 얻는 방식이다. 역시나 비효율적이지만 기능적으로는 돌아간다.

해결
1.

public void orderStart(ArrayList orderList) {
        int sum = 0;

        for (int i = 0; i < orderList.size(); i++) {
            String str = orderList.get(i).toString();
            String[] array = str.split(",");
            String numberStr = array[1].trim();

            int price = Integer.parseInt(numberStr);
            sum += price;
        }
        System.out.println("총액 : " + sum);
        System.out.println();
    }

바퀴가 없거나 혹은 네모난 모양이지만 어떻게 굴러는 간다.




4. 앞으로의 나는

  1. 자꾸만 스파게티, 하드코딩이 되고 비효율을 따지게 되는 이유가 근본적인 구조상의 문제라고 생각한다. 내일은 전체적인 수정이 있을 예정이다.
  2. 원래 만들고 싶었던 생성자와 getter를 이용해 인자를 받는 식으로 변경하고 싶지만 과연 하루만에 끝낼 수 있을지...
profile
배우는 사람

0개의 댓글