Everyday Dev System

0531_TIL : 배열과 List의 차이 본문

내배캠 주요 학습/TIL : Today I Learned

0531_TIL : 배열과 List의 차이

chaeyoung- 2023. 5. 31. 23:59
public class Order {
    private Food[] cartFoods = new Food[];
    private Food[] orderFoods = new Food[];
}

# 문제점 : Food 클래스 타입의 몇개의 요소가 필요할지 명확하지 않은 상황에서 위에 객체 배열을 사용하려면 크기를 반드시 지정해야 했다. 하지만, 사용자가 몇개 상품을 주문할지 모르기 때문에 정확히 정의할 수 없는 상황이다.

배열은 고정된 크기를 지정해야 한다는 문제점이 있다..

 

 

# 시도 :

1. 주문할 상품의 갯수를 먼저 입력 받아서 할당하기

Main.java 일부

Scanner sc = new Scanner(System.in);
int foodCnt = sc.next();
Order order = new Order();
order.setCartFoodCnt(foodcnt);

Order.java 일부

public class Order {
    private Food[] cartFoods ;
    
    public void setCartFoods(Food[] cartFoods) {
        this.cartFoods = cartFoods;
    }
}

 

        for(int i=0;i<=cartFoods.length();i++){
            f.printFood(f);
        }

-> 위와 같은 방법으로 하고 for문을 통해 출력을 할 경우, 

out of index 오류가 발생하였다.

 

2. ArrayList 활용하기

    private List<Food> cartFoods = new ArrayList<>();
    private List<Food> orderFoods = new ArrayList<>();

-> 위의 Food[] f = new Food[5]; 의 코드를 ArrayList 자료 타입을 활용하였더니 해결됐다.

List와 배열의 차이점이 있었다. 이를 더 찾아보고 정리해보았다.

 

 

# 문제해결 : ArrayList 타입의 자료구조를 활용하여 해결하였다.

 

List는 언뜻보면 배열과 같은 듯 보이지만, 차이점이 있다.

바로, 배열과 리스트의 크기에 대한 개념이다.

배열 : 크기를 한번 지정하면 사이즈가 고정이되어 변경할수가 없다.

리스트 : 자료를 넣는 만큼 자동적으로 사이즈가 늘어나기 때문에 이를 동적으로 활용하기에 유리하다.

 

 

간단한 코드를 짜는데에도 이렇게 자료구조의 쓰임과 각각에 맞는 장단점이 있다는 사실을 알게 되는 것 같다.

자료구조 공부를 하였음에도 아직 많이 부족하고 더욱 심도있게 학습해야 한다는 것을 다시금 깨달았다.

 

튜터님께 오늘 질문을 하였다.

 

첫번째 질문으로, 가독성이 좋은 코드를 어떻게 짜면 되는지에 대해서 질문을 했는데,

정말 좋은 답변을 들어서 공유하고 싶다.

 

1. 검증된 코드를 많이 보기 

      - 자바 내부에 구현되어 있는 ArrayList와 같은 내부 구현체를 많이 보고 비교해봐라

2, naming과 최대한 간략하게 보기 수월하게 코드를 구성하는 것이 좋다.

3. 한클래스 라인 100 line 이내를 권장한다.

 

이 말을 듣고 ArrayList에 구현된 메서드를 바로 찾아보고 하나하나 이해하려 노력했다.

하지만, 이해가 잘 되지 않았다. 이를 보기 위해서는 Object 클래스, Collection 클래스의 내부도 봐야 하기 때문에

다 이해하기란 힘들었다.

그렇지만, 확실히 코드가 간단하다는 것이 보여서 이와 같은 간략함을 추구하며 코드를 작성하려 노력해야 겠다.

 

 

두번째 질문으로, 객체 지향에 맞게 코드를 잘 짠건지 어떻게 구분해야 하는가?
- 객체지향 5대 원칙에 맞게 구현하였는가?
- 객체지향의 꽃인 다형성을 잘 활용하고 있는가?

 

 

또한, 오전에 알고리즘 풀이 강의를 들으면서 간과하고 있던 부분을 다시 정리해보았다.

 

1. 인터페이스와 추상 클래스 활용 차이
- 인터페이스는 그저 명세(설계서)이고, 기능을 구현하지는 않고 메서드의 선언만 한다.
- 추상클래스는 공통의 기능을 구현한다는 점에서 인터페이스와 차이가 있다.
  주로, 기능을 확장하기 위해 상속하는 용도로 사용한다.
2. StringBuilder와 String 타입의 차이
- 불필요한 메모리를 피하기 위해! 메모리 관리 필요성 때문에 활용함.

  이것은 더 명확히 이해하고 찾아보면서 깨닫고 정리할 예정이다.