자바의 배열에 대해서 알아보자.
배열
배열이란 동일한 타입의 여러개의 자료(변수)를 한꺼번에 저장하기 위해서 사용하는 하나의 묶음이라고 할 수 있다. 여기서 중요한 점은 '같은 타입'이어야 하며 서로 다른 타입의 변수들로는 배열을 만들 수 없다. 배열은 고정된 크기이며, 변수와 달리 각 저장공간이 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가 출력된다.
'언어공부 > Java' 카테고리의 다른 글
자바 클래스와 객체 - 객체지향 언어/ 객체 속성과 기능/ 객체와 인스턴스/ 객체의 생성과 사용 (0) | 2021.05.03 |
---|---|
자바 다차원 배열 - 2차원 배열 (이차원 배열) 선언 및 생성/ 배열 초기화/ 배열 인덱스/ 배열 길이/ 배열 출력 (0) | 2021.05.02 |
자바 보조 제어문 - break 문, continue문 +레이블 (0) | 2021.05.01 |
자바 반복문 - while문/ 무한루프문/ do~while문 (0) | 2021.05.01 |
자바 반복문 - for문/확장 for문(향상된 for문) (1) | 2021.04.30 |