▶ JAVA/개념정리

[Java] 8. 배열

휴학생감자 2022. 2. 4. 23:04

*배열 예제코드는 다음 글에 게시

 

 

1. 일차원 배열

 

같은 타입의 변수 여러개를 하나로 묶어서 다루는 것

 

# 배열 선언

int[] array;

→ 여기서 array는 배열이 아닌 배열을 다루기 위한 참조변수이다.

 

# 배열 생성

array = new int[10];

→ 실제로 값을 저장할 수 있는 공간을 만든 것이다.

→ 배열을 생성하기 위해 new라는 예약어를 반드시 사용해야 한다.

 

배열 내 각 요소에 접근하기 위해 인덱스를 사용하며,

각 요소의 인덱스는 순서대로 0부터 부여된다.

또한, 배열은 생성됨과 동시에 값을 저장하지 않으면 각 타입의 기본값으로 자동 초기화된다.

 

※ 에러 : ArrayIndexOutOfBoundsException

인덱스의 범위가 유효하지 않다는 것으로 인덱스의 범위를 넘어가는 값을 사용하면 발생한다.

Ex) int arr = new int[5];                   ...       arr[5] = 32;                 //에러 발생 : arr의 인덱스 범위는 0~4이다.

 


# 배열의 길이

양의 정수 값을 가지며, 배열은 생성 후 길이를 변경할 수 없으므로 길이도 변하지 않는다.

배열의 길이는 배열이름.length를 통해 알 수 있으며, 이 값은 상수이다.

+) 길이 변경방법 : 더 큰 배열을 생성하여, 기존 배열의 내용을 새 배열에 복사한다. (아래 내용 추가)

 

# 배열 초기화

① 각 요소의 값을 지정

     int[] age = new int[5];

     age[0] = 10;   age[1] = 20;   age[2] = 30;   age[3] = 40;   age[4] = 50; 

 

② 생성과 초기화를 동시에 하기 (new 생략 가능)

      int[] age = new int[] {10, 20, 30, 40, 50};

      int[] age = {10, 20, 30, 40, 50};   

 

③ 생성 후 초기화하기 (new 생략 불가능)

      int[] age;

      age = new int[]{10, 20, 30, 40, 50};   

 

# 배열 출력하기

① 반복문 사용

      for(int i=0; i<age.length; i++) {

               System.out.println(age[i]);

      }

 

② 향상된 for문 사용하기

    for (int array : age) {

           System.out.println(array);

    }

 

 ③ Arrats.toString() 

    System.out.println(Arrats.toString(age));

 

# 배열 복사하기

배열은 생성 후 길이를 변경할 수 없으므로 새로운 배열을 만든 후,

이전 배열을 복사하여 더 큰 저장공간을 확보할 수 있다.

 

방법 1. for문 이용하기

              Ex)   int[] age = {10, 20, 30, 40, 50}; 

                       int[] newAge;                                        1) 새로운 배열을 만든다.

                       for(int i=0; i<age.length; i++) {       2) 기존 배열의 내용을 새로운 배열에 옮긴다.

                                newAge[i] = age[i];

                        }

                        age = newAge;                                    3) 기존의 참조변수가 새 배열을 가리키도록 한다.

 

방법 2. System.arraycopy( )이용하기          

             (방법1의 for문을 아래와 같이 바꾸면 된다.)

              Ex) System.arraycopy(age, 0, newAge, 0, age.length);

                      System.arraycopy(기존배열, 복사 시작 인덱스, 새배열, 복사 위치 인덱스, 복사 데이터 개수);

        


2. String 배열

 

# 타입별 변수의 기본값

boolean → false

char → '\u0000'

byte, short, int → 0

long → 0L

float → 0.0f

double → 0.0d or 0.0

참조형 변수 → null

 

String배열에 저장되는 것은 객체의 주소이며, 참조형 배열은 객체 배열이라고도 한다.

즉, String[] fruit = {"apple", "banana", "grape"}; 와 같이 선언했을 때,

fruit는 배열의 주소를 가리키며, 각 배열에는 객체의 주소가 저장되므로 실제 값은 새로운 객체에 저장되어 있다.

 

# String클래스의 주요 메서드

- char charAt(int index) : 문자열에서 해당되는 인덱스의 문자를 반환

- int length( ) : 문자열의 길이를 반환

- String substring(int from, int to) : 문자열 내에 해당 범위의 문자열을 반환

- boolean equals(String str) : 문자열의 내용이 같은지 확인

- char[] toCharArray( ) : 문자열을 문자배열(char[])로 변환하여 반환

 


3. 다차원 배열

 

2차원 배열

주로 테이블 형태의 데이터를 저장하며, 일차원 배열을 선언할때 대괄호([ ])만 하나 더 붙여주면 된다.

행과 열로 구성되어 있으며, 배열에 배열이 추가된 형태라고 생각하면 된다.

 

일반 배열은 배열이름.length를 통해 배열 요소를 알아냈으나,

다차원 배열에서는 배열이름[인덱스].length를 통해 알 수 있다는 점에 유의해야 한다.

 

가변 배열

전체 배열의 차수 중 마지막 차수의 길이를 지정하지 않고 생성한 배열

Ex. int[ ][ ] student = new int[10][ ];

따라서, 가변 배열 생성 시 각 행마다 다른 길이의 배열을 생성할 수 있다.