본문 바로가기

언어공부/Java

자바 배열 선언 및 생성/ 배열 초기화 / 배열 인덱스 / 배열 길이 / 배열 출력

자바의 배열에 대해서 알아보자.

배열

배열이란 동일한 타입의 여러개의 자료(변수)를 한꺼번에 저장하기 위해서 사용하는 하나의 묶음이라고 할 수 있다. 여기서 중요한 점은 '같은 타입'이어야 하며 서로 다른 타입의 변수들로는 배열을 만들 수 없다. 배열은 고정된 크기이며, 변수와 달리 각 저장공간이 0부터 연속적으로 배치되어 있다.

 


배열 선언 및 생성

배열을 선언하는 방법은 원하는 타입의 변수를 선언하고 해당 변수가 배열임을 의미하는 대괄호([ ])를 붙이면 된다.

ex) 타입[ ] 변수명 ; >> int[ ] score; // 배열을 다루기 위한 참조변수 선언

 

배열을 생성한 후에는 배열을 생성해야한다. 배열을 생성해야만 값을 저장할 수 있는 공간이 만들어진다. 배열을 생성하려면 연산자'new'키워드로 배열 타입과 길이를 지정해주어야 한다.

ex)변수이름 = new 타입[길이]; // 실제 저장공간을 생성

 

여기서 배열의 선언과 생성을 동시에 하면 아래와 같다.

ex)타입[ ] 변수명 = new 타입[길이]; //배열의 선언과 생성을 동시에 함.

   int[ ] score = new int[3]; //길이가 3인 int형 score배열 선언 및 생성

 


배열의 초기화

배열은 생성과 동시에 자동적으로 0으로 초기화 되므로 배열을 사용하기 전에 따로 초기화를 해주지 않아도 되지만, 원하는 값을 저장하려면 아래와 같이 각 원소마다 값을 지정해줘야 한다.

ex) int[ ] score = new int[3];

    score[0]=70; //각 인덱스에 값을 저장한다.

    score[1]=80;

    score[2]=90;

 

배열의 길이가 큰 경우에는 위의 예제처럼 하나 하나 값을 지정하는 것 보다 for문을 사용하는 것이 좋다. (단, 일정한 규칙이 있어야함.)

ex) for(int i=0; i<score.length; i++){ //score.length는 배열 score의 길이(=3)이다.

          score[i]= i * 10+ 60; } //score[0], score[1], score[2]에 대해서 값이 대입된다.

 

하지만 제일 좋은 방법은 배열의 선언, 생성 및 초기화를 한꺼번에 하는 방법이다.

ex) int[ ] score={70, 80, 90}; //new int[ ]를 생략 가능.

{ }안의 값의 개수에 의해 배열의 길이가 자동적으로 결정되기 때문에 new int[ ]를 생략할 수 있다.

 

주의점은 아래와 같이 배열의 선언과 생성을 따로 하는 경우에는 new int[ ]를 생략할 수 없다.

ex) int[ ] score;

    score = new int[ ]{70, 80, 90};

 


배열 인덱스

생성된 배열의 각 저장공간을 element라고 한다. 배열이름[인덱스]의 형식으로 접근하며, 인덱스(index)는 배열의 원소마다 붙여진 일련번호로 각 원소를 구별하는데 사용된다. 인덱스는 1이 아닌 0부터 시작하는 것에 유의해야 한다.

ex) int[ ] score = new int[3];// 길이가 3인 int배열로 score[0]~score[2]까지 있다.

인덱스에 상수 대신 변수나 수식도 들어갈 수 있다.

ex) score[i]

 


배열의 길이

자바에서 배열의 길이는 "배열이름.length"로 알 수 있다. 자바가상머신(JVM)이 모든 배열의 길이를 별도로 관리하기 때문이다. 배열은 한번 생성하면 길이를 변경할 수 없기 때문에 이미 생성된 배열의 길이는 변하지 않는다. 따라서 "배열이름.length"는 상수이며 값을 읽을 수만 있을 뿐 변경할 수는 없다. (배열의 길이가 0인 배열도 생성 가능하다.)

 

보통 배열의 원소를 for문을 이용해 출력할 때 많이 사용된다.

ex) int[ ] score={70, 80, 90}; //배열의 길이가 3인 score 배열 선언&생성&초기화

     for(int i=0 ; i<score.length ; i++){ // 인덱스 i변수가 0~2일 동안 반복 (score.length=3)

          System.out.print(score[i]+" "); }//원소값인 70 80 90이 출력된다.

인덱스의 범위는 0부터 "배열길이-1"이기 때문에 i<score.length로 조건을 줘야한다.

 


배열 출력

배열에 저장된 값을 확인할 때는 여러가지 방법이 있는데 첫 번째는 아까와 같이 for문을 사용하면 된다.

ex) int[ ] score={70, 80, 90}; //배열의 길이가 3인 score 배열 선언&생성&초기화

   for(int i=0 ; i<score.length ; i++){ // 인덱스 i변수가 0~2일 동안 반복 (score.length=3)

        System.out.print(score[i]+" "); }//원소값인 70 80 90이 출력된다.

 

두 번째는 확장 for문을 이용해서 출력이 가능하다. (JDK 1.5부터 적용됨.)

ex) for(int k:score){//변수 k에 배열에 저장된 값이 매 반복마다 하나씩 순서대로 저장된다.

        System.out.print(k+" "); } // 변수명을 출력하면 해당 인덱스대로 배열원소값이 출력된다.

 

세 번째는 "Arrays.toString(배열이름)"메소드를 사용하면 배열의 모든 원소들을 [첫 번째 원소값, 두 번째 원소값, 세 번째 원소값, ...]와 같은 형식의 문자열로 만들어서 반환한다. 이 메소드를 사용하려면 "import java.util.Arrays"를 추가해야 한다. (단축키 ctrl+shift+o)

ex) System.out.println(Arrays.toString(score)); // [70, 80, 90]이 출력된다.

 

예외적으로 char배열은 println메소드로 출력하면 각 요소가 구분자 없이 그대로 출력된다.

ex) char[ ] chArr = {'a', 'b', 'c'};

     System.out.println(chArr); // abc가 출력된다.