배열이란
- 같은타입의 데이터를 연속된 공간에 저장하는 자료구조
- 각 데이터 저장 위치는 인덱스를 부여해서 접근할 수 있다.
배열의 인덱스는 0 부터 시작.
score[3] = 90;
스코어의 3번째인덱스에 있는 항목은 90이다.
배열의 필요성?
- 중복된 변수 선언을 줄이기 위해 사용
- 반복문을 이용해서 요소들을 쉽게 처리하기 위해
배열선언
- 배열을 사용하기 위해서는 우선 배열변수를 선언해야 한다.
- []배열문자 뒤 또는 앞에 선언하는 변수를 배열변수라고 한다.
- 타입[] 변수; ex) int[] array ;
- 타입 변수[]; ex) int array [];
- 배열변수는 참조변수이므로 배열이 생성되기 전에 null로 초기화가 가능하다.
- 참조변수의 경우에는 값이 없을 땐 힙 영역의 null을 참조함.
타입[] 변수 = null;
- 배열변수가 null일 때 항목에 접근할 수 없다.
즉 변수[인덱스]가 안된다. -> NullPointerException 발생
값을 넣은 후 접근 가능!
값 목록으로 배열 생성
- 변수 선언과 동시에 값 목록 대입
데이터타입[] 변수 = {값0, 값1, 값2, 값3 ...};
ex) String[] names = {"이호석", "김선호", "최우식"};
이 값들은 힙 영역에 인덱스번호 0부터 저장이 된다.
- 변수 선언 후에 값 목록 대입
데이터타입[] 변수;
변수 = new 타입 [] {값0, 값1, 값2 ..};
ex) String[] names = null;
names = new String[] {"이호석", "김선호", "최우식"};
변수 선언 후에 값 목록을 대입하는 경우에는
대입하는 값 앞에 new와 타입[]을 넣어주어야 한다.
: 배열을 매개변수로 가지는 메소드를 호출할때 , 배열을 직접 생성해서 매개값으로 줄 경우 이렇게 배열을 생성한다.
예제1)
package review;
public class Array01 {
public static void main(String[]args) {
int[] score = {83, 90, 87};
System.out.println("score[0] : " + score[0]);
System.out.println("score[1] : " + score[1]);
System.out.println("score[2] : " + score[2]);
int sum = 0;
for (int i=0; i<3; i++) {
sum += score[i];
}
System.out.println("총합 : " + sum);
double avg = (double) sum /3; //소수점 아래까지 정확히 출력하기 위해 실수/정수를 해준다.
System.out.println("평균 : " + avg);
}
}
예제2)
package review;
public class Array2 {
public static void main(String[] args) {
int[] scores;
scores = new int[] {83, 90, 87}; //배열을 먼저 선언하고 배열에 값을 넣을 땐 값만 쓰지 말고 new와 배열타입[]을 붙인다.
int sum1=0;
for(int i=0; i<3; i++) {
sum1 += scores[i];
}
System.out.println("총합 : " + sum1);
int sum2 = add(new int[] {83, 90, 87});
System.out.println("총합 : " + sum2);
}
//add라는 메소드의 매개변수로 int[] scores라는 배열변수가 선언되어있는 상황.
//add는 배열객체의 항목들을 전부 다 더해서
public static int add(int[] scores) {
int sum1=0;
for(int i=0; i<3; i++) {
sum1 += scores[i]; //배열 안에 들어있는 항목 값의 누적
}
return sum1;
}
}
new 연산자로 배열 생성
- 배열 생성 시 값 목록을 가지고 있지 않고 프로그램이 실행하면서 동적으로 값을 저장하고 사용하고 싶을 경우
향후 값들을 저장할 배열을 미리 생성하고 싶을 경우
타입[] 변수 = new 타입[길이]; ex)길이: 저장하고싶은 값의 개수
타입[] 변수 = null;
변수 = new 타입[길이];
전체 길이에서 -1 한 값이 전체 인덱스 번호이다.
항목의 기본값
분류 | 데이터타입 | 초기값 |
기본타입 (정수) | byte[] | 0 |
char[] | '\u0000' | |
short[] | 0 | |
int[] | 0 | |
long[] | 0L | |
기본타입 (실수) | float[] | 0.0F |
double[] | 0.0 | |
기본타입 (논리) | boolean[] | false |
참조타입 | 클래스[] | null |
인터페이스[] | null |
int[] scores = new int[30];
String[] names = new String[30];
> new로 배열을 생성할 때는 항목의 기본값이 존재한다.
예제1 )
package review;
public class Array_new {
public static void main(String[] args) {
int[] arr1 = new int[3];
for(int i =0; i<3; i++) {
System.out.println("arr1[" + i + "]: " + arr1[i]);
}
}
}
> 만약 0인덱스에 10을 저장하고 싶다?
package review;
public class Array_new {
public static void main(String[] args) {
int[] arr1 = new int[3];
for(int i =0; i<3; i++) {
System.out.println("arr1[" + i + "]: " + arr1[i]);
}
System.out.println();
//각 배열에 새로운 값 저장
arr1[0] = 10;
arr1[1] = 20;
arr1[2] = 30;
for(int i=0; i<3; i++) {
System.out.println("arr1[" + i + "]: " + arr1[i]);
}
}
}
> 실수타입 배열 만들고 새로운 값 대입하기
//실수타입 배열 만들기
double[] arr2 = new double[3];
for(int i=0; i<3; i++) {
System.out.println("arr2[" + i + "]: " + arr2[i]);
}
System.out.println();
//각 배열에 새로운 값 저장
arr2[0] = 0.1;
arr2[1] = 0.2;
arr2[2] = 0.3;
for(int i=0; i<3; i++) {
System.out.println("arr2[" + i + "]: " + arr2[i]);
}
System.out.println();
> 스트링 타입 배열 만들고 새로운 값 대입하기
String[] arr3 = new String[3];
for(int i=0; i<3; i++) {
System.out.println("arr3[" + i + "]: " + arr3[i]);
}
System.out.println();
arr3[0] = "이호석";
arr3[1] = "김선호";
arr3[2] = "최우식";
for(int i=0; i<3; i++) {
System.out.println("arr3[" + i + "]: " + arr3[i]);
}
출처: 신용권님의 '이것이 자바다' 교재 및 유튜브 강의(https://youtu.be/dDD8T7fbq9k)
'java' 카테고리의 다른 글
[java] 추상클래스와 인터페이스의 차이? (0) | 2021.08.26 |
---|---|
[JAVA] 버블정렬 버블소트 (Bubble Sort) (0) | 2021.08.24 |
[이것이자바다] 5.6 배열타입(3) (0) | 2021.08.22 |
[이것이자바다] 5.6 배열타입(2) (0) | 2021.08.22 |
1. java 시작하기 (0) | 2021.07.20 |