배열

HYUNBIN CHO·2021년 6월 2일
0

java

목록 보기
8/23
post-thumbnail

🔷 배열

같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
🔸 장점
  같은 타입의 여러 개의 변수를 하나의 변수에 저장이 가능하므로 ➡️ 코드가 줄어들고 데이터 관리가 편해짐
🔸 단점
  배열의 선언 시에 크기를 정해야 함. ➡️ 정해진 크기는 변경, 추가, 삭제 불가능

🔷 배열의 선언, 생성, 초기화

🔹 1. 선언

타입[] 변수이름;
타입 변수이름[];

int[] age;
int age[];

🔹 2. 생성

타입[] 변수이름; (선언)
변수이름 = new 타입[배열의 길이]; (생성)

배열의 선언 후에는 반드시 생성을 해야 한다.
선언은 배열을 다루기 위한 참조변수의 공간이 만들어진 것이고, 생성을 해야 값을 저장할 수 있는 공간이 만들어 지는 것이다.

int[] score = new int[5];

🔹 3. 길이와 인덱스

생성된 배열의 저장공간들을 배열의 요소라고 하고, 각 배열의 요소에 접근할 때는 배열요소[인덱스]의 형식으로 접근한다.
🔸 인덱스 : 배열의 요소마다 붙여진 일련번호
🔸 인덱스의 범위 : 0 ~ 배열의 길이-1 (배열의 길이가 5라면 인덱스는 0 ~ 4까지)
인덱스의 범위를 벗어난 인덱스를 사용한다면 ArrayIndexOutOfBoundsException이 발생한다.
🔸 배열이름.length 를 통해서 배열의 길이를 쉽게 알 수 있다.
(배열은 한 번 생성하고 나면 길이를 변경할 수 없기 때문에 배열이름.length는 상수)

🔹 3. 초기화

생성과 동시에 타입에 해당하는 기본값으로 초기화되기 때문에 따로 초기화를 하지 않아도 된다.
하지만 원하는 값을 저장하기 위해서는 각 요소에 값을 지정해 줘야한다.
🔸초기화 방법 3가지

int[] score = new int[5];
for(int i = 0; i < score.length; i++){
    score[i] = i * 10 + 50;
}
// 일정한 규칙이 있어야 사용 가능한 방법
int[] score = new int[]{50, 60, 70, 80, 90};
int[] score = {50, 60, 70, 80, 90};
int[] score;
score = new int[]{50, 60, 70, 80, 90}; // new int[] 생략 불가

🔷 배열의 출력

int[] arr = {100, 40, 50, 80, 75};
for(int i = 0; i < arr.length; i++){
    System.out.println(arr[i] + " ");
}    
int[] arr = {100, 40, 50, 80, 75};
System.out.println(Arrays.toString(arr));
// 타입@주소의 형식으로 출력된다.

🔷 배열의 복사

배열은 한 번 생성하면 길이를 변경할 수 없기 때문에 더 많은 저장공간이 필요하면 더 큰 배열을 새로 만들고 복사해야 한다.

🔹 1. for문 이용하기

int[] arr = new int[5];
int[] tmp = new int[arr.length * 2];
for(int i = 0; i < arr.length; i++){
    tmp[i] = arr[i];
}
arr = tmp;

🔹 2. System.arrayCopy() 이용하기

int[] arr = new int[5];
int[] tmp = new int[arr.length * 2];
System.arrayCopy(arr, 0, tmp, 0, arr.length);
//  arr[0]에서, tmp[0]으로, arr.length개 배열 복사
arr = tmp;

🔷 String타입의 배열

String타입 배열의 생성, 선언, 초기화도 기본형 타입의 배열과 동일하다.

String[] name = new String[5];
String[] name = {"Kim", "Lee", "Park", "Choi", "Cho"} // new String[] 생략가능

🔸 참조형 타입의 배열은 실제 데이터가 아닌 객체의 주소가 저장된다. (이러한 참조형 배열을 객체배열이라고 한다.)

🔷 다차원 배열

🔹 2차원 배열

🔸 선언
    타입[][] 변수이름;
    타입 변수이름[][];
    타입[] 변수이름[];

int[][] score;
int score[][];
int[] score[];

🔸 초기화 : 1차원 배열과 같이 {}를 사용하여 생성 및 초기화한다. 단, {}를 한 번 더 써서 행을 구분해준다.

int[][] arr = new int[][]{1, 2, 3}, {4, 5, 6};
int[][] arr = {
                {1, 2, 3},
                {4, 5, 6}
              };

🔹 가변 배열

int[][] score = new int[5][3];

int[][] score = new int[5][];
score[0] = new int[3];
score[1] = new int[5];
score[2] = new int[2];
score[3] = new int[3];
score[4] = new int[6];

int[][] score = {
                  {100, 100, 90},
                  {65, 90, 70, 85, 90},
                  {95, 90},
                  {65, 75, 80},
                  {100, 95, 90, 85, 90}
                };
                 

🔹 다차원 배열의 예

String[][] words = {
                      {"chair", "의자"}, // words[0][0], words[0][1]
                      {"computer", "컴퓨터"}, // words[1][0], words[1][1]
                      {"integer", "정수"} // words[2][0], words[2][1]
                  };
Scanner sc = new Scanner(System.in);
for(int i = 0; i < words.length; i++){
    System.out.printf("Q%d. %s의 뜻은 무엇인가요?", i+1, words[i][0]);
    String tmp = sc.nextLine();
   
    if(tmp.equals(words[i][1])){
        System.out.printf("정답입니다.%n%n");
    }else{
        System.out.printf("틀렸습니다. 정답은 %s입니다. %n%n", words[i][1]);
    }
}    
profile
백견이 불여일타

0개의 댓글

관련 채용 정보