1. 개념

    1. 같은 종류의 데이터들을 연속된 공간에 저장하는 자료구조
  2. 특징

    1. 같은 타입만 저장
  3. 인덱스 (번호)로 접근

  4. 크기 고정

  5. 연속된 메모리

  6. 참조값을 저장하는 것이 목표

  7. 장점

    1. 빠른 접근
      1. 인덱스를 이용하면 0(1)시간에 값에 접근 가능
    2. 구조 단순
      1. 이해하고 사용하기 쉬움
    3. 메모리 효율적
      1. 연속된 공간을 차지해서 관리가 단순함
  8. 단점

    1. 크기 고정

      1. 처음 선언할 때 크기를 알아야 하고, 변경 불가
    2. 삽입/삭제 불편

      1. 중간에 원소를 넣거나 뻬려면 다 옮겨야 함
    3. 타입 제한

      1. 한 배열에는 같은 자료형만 넣을 수 있음
      int [] numbers = new int [5];
      numbers[0] = 10;
      numbers[1] = 20;
      
      System.out.println(numbers[0]); //10
      System.out.println(numbers[1]); //20
      
      for(int i = 0; i < numbers.length; i++){
      	System.out println(numbers[i]);
      }
      
  9. 이중배열

    1. 특징

      1. 행과 열 구조
        1. [행][열] 방식으로 접근
      2. 메모리 연속성
        1. 언어에 따라 다르지만, 기본적으로 배열들이 붙어있거나 배열의 배열로 구현됨
      3. 배열 크기
        1. 보통 행 크기와 열 크기를 정해줘야 함
    2. 장점

      1. 표 형태 표현 가능
        1. 좌표, 게임판, 행렬 같은 건 다루기 쉬움
      2. 논리적 구조 명확
        1. 데이터가 직관적으로 행렬 형태로 정리됨
      3. 다차원 확장 가능
        1. 2차원 → 3차원 까지 확장 가능
    3. 단점

      1. 메모리 사용 큼
      2. 복잡도 증가
        1. 인덱스가 2개 이상이라 코드 가독성이 떨어질 수 있음
      3. 크기 고정 문제 동일
        1. 배열이라서 크기 변경은 힘듬
      //2행 3열짜리 이중 배열 선언
      int[][] matrix = new int [2][3];
      
      matrix[0][0] = 1;
      matrix[0][1] = 2;
      matrix[0][2] = 3;
      matrix[1][0] = 4;
      matrix[1][1] = 5;
      matrix[1][2] = 6;
      
      System.out.println(matrix[0][0]); //1
      System.out.println(matrix[1][2]); //6
      
      for(int i=0; i<matrix.length; i++){  //행
      	for(int j =0; j < matrix[i].length; j++){ //열
      	System.out.print(matrix[i][j] + " ");
      	}
      }
      
  10. 1차원 배열

    1. 일렬로 세워둔 바구니
  11. 2차원 배열

    1. 표처럼 바둑판 모양
  12. 자바에서 대입은 변수에 들어있는 값을 복사한다.

  13. 배열 선언 최적화

    1. 우리가 직접 정의한 Student 타입도 일반적인 변수와 동일하게 배열을 생성할 때 포함할 수 있다.
    Student [] students = new Student[]{student1, student2};
    
    1. 생성과 선언을 동시에 하는 경우 다음과 같이 더 최적화 할 수 있다.
    Student[] students = {student1, student2};