배열(array)
: 같은 타입 데이터 여러 개를 하나의 묶음(변수)으로 다루는 메모리 공간
배열의 특징
- 같은 타입 데이터만 저장 가능
- 여러 변수에 해당하는 메모리 공간이 연속된 공간에 차례대로 생성됨 => 한 번 생성된 배열은 크기 변경 불가능
- 기본 데이터타입과 참조 데이터타입 모두 배열로 사용 가능
- 배열은 선언, 생성, 초기화의 3단계 과정을 거쳐서 사용
- 배열 생성 시 각 공간에 해당하는 인덱스(번호)가 자동으로 부여됨 => 0부터 시작하여, 배열크기 -1까지 부여됨
- 배열이 생성될 경우 배열의 데이터 저장 공간은 배열의 데이터타입에 해당하는 기본값으로 자동으로 초기화 (byte, short, int = 0, long = 0L, float = 0.0f, double = 0/0 char = 0 또는 '\u0000', boolean = false, String = null)
- 배열의 이름(변수명)을 사용하여 배열에 접근 가능(인덱스 필요)
- 배열의 크기는 배열명.length 속성을 통해 알아낼 수 있음
배열의 선언 기본 문법
데이터타입[] 변수명;
=> 변수 선언과 유사하나, 데이터타입 뒤에 [] 기호를 붙여 배열 표시 => 배열 공간이 생성되기 전이므로, 아직 데이터 저장은 불가 => 선언된 배열의 변수는 참조형 변수로 취급됨 (주의! int는 기본형이지만, int[]은 참조형)
배열의 생성 기본 문법
변수명 = new 데이터타입[배열크기];
=> new 키워드를 사용하여 배열 공간을 생성하는데 데이터타입 뒤의 대괄호 안에 생성할 배열의 크기를 명시 => 생성되는 배열의 위치(주소값)를 선언된 배열 타입 변수에 저장 => 이제, 실제 메모리 공간이 생성되었으므로 데이터 저장이 가능 => 생성된 배열에는 자동으로 인덱스 번호가 부여됨 (인덱스 번호는 0 ~ 배열크기 -1까지 자동으로 부여됨)
배열 선언 및 생성을 하나의 문장으로 결합
데이터타입[] 변수명 = new 데이터타입[배열크기];
int[] score = new int[5];
- 배열선언 : 데이터타입[] 배열명;
// 학생 점수 5개를 별도의 변수에 저장하고 관리하는 경우
int score1 = 90, score2=60, score3=80, score4=100, score5=50;
int scoreTotal = score1 + score2 + score3 + score4 + score5;
// ===========================================================
// 학생 점수 5개(정수)를 저장할 배열(score) 선언 및 생성, 초기화
// 1. 배열선언 : 데이터타입[] 배열명;
int[] score; // int형 정수 여러개를 저장할 배열 score를 선언 // 정수형 배열 타입
// => 아직 데이터를 저장할 수 있는 메모리 공간 생성되기 전
// score = 90; // 오류발생! 배열 이름으로 사용되는 변수에 데이터 저장 불가!
// => Type mismatch // 정수형 배열타입 != 정수형
- 배열 생성 : 변수명(배열명) = new 데이터타입[배열크기];
// 2. 배열 생성 : 변수명(배열명) = new 데이터타입[배열크기];
score = new int[5];
// 연속적인 int형 배열 공간 5개를 생성하고,
// 해당 공간의 메모리 주소를 int[] 타입 변수 score에 저장
// => 이 때, 5개의 메모리 공간에는 각각의 인덱스 번호가 자동으로 부여됨
// (인덱스 번호는 0~4까지 부여됨)
배열 접근 기본 문법
변수명[인덱스]
=> 변수명에 해당하는 주소(배열공간)에 접근 한 뒤 인덱스에 해당하는 데이터 저장 공간에 접근 => 배열에 데이터 초기화(저장) 시 변수명[인덱스] = 데이터;
System.out.println(score); // 배열명 그대로 출력 시 주소값 출력(데이터X)
System.out.println(score[0]); // score 배열의 0번 인덱스 데이터 값 출력
System.out.println(score[1]); // score 배열의 1번 인덱스 데이터 값 출력
System.out.println(score[2]); // score 배열의 2번 인덱스 데이터 값 출력
System.out.println(score[3]); // score 배열의 3번 인덱스 데이터 값 출력
System.out.println(score[4]); // score 배열의 4번 인덱스 데이터 값 출력
=> 이때, 배열은 자동으로 기본값으로 초기화되므로 0 출력됨
System.out.println(score[5]); // 실행 시 오류 발생!
// Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:
// Index 5 out of bounds for length 5 at array.Ex.main(Ex.java:89)
// => ArrayIndexOutOfBoundsException: Index 5 -> 5번 인덱스가 범위를 벗어남
// => array.Ex.main(Ex.java:89) ->Ex.java 클래스의 89번 라인이 오류
주의! 생성된 배열의 인덱스 범위를 벗어나는 배열 접근 시 오류 발생! ⇒ 단, 문법적으로 오류가 아니기 때문에 코드 상에서는 알 수 없고, 프로그램 실행 시점에서 오류가 발견됨
반복문을 통하여 배열의 모든 인덱스 접근 기본 공식
for(int i=0; i<배열명.length; i++ {
// 배열명[i] 형태로 접근
}
배열에 데이터 저장(초기화) => 90, 60, 80, 100, 50
score[0] = 90; // score 배열의 0번 인덱스 데이터 값 출력
score[1] = 60; // score 배열의 0번 인덱스 데이터 값 출력
score[2] = 80; // score 배열의 0번 인덱스 데이터 값 출력
score[3] = 100; // score 배열의 0번 인덱스 데이터 값 출력
score[4] = 50; // score 배열의 0번 인덱스 데이터 값 출력
score[10] = 100; // 존재하지 않는 인덱스 접근. 실행 시 오류 발생!
for문을 사용하여 배열 인덱스 범위(0~4)까지 반복하면서 출력문 통해 배열 인덱스에 차례대로 접근하여 데이터 출력
for(int i=0;i<5; i++) {
System.out.println(score[i]); //score[0]~score[4]까지 대응
}
System.out.println("배열 score의 크기: "+score.length);
배열 전체 접근 시 기본 공식을 사용하여 배열 데이터 모두 출력
for(int i=0; i<score.length; i++) {
// System.out.println(score[i]); //score[0] ~ score[4] 까지 대응
System.out.println(i + "번 인덱스 : " + score[i]); //score[0] ~ score[4] 까지 대응
}
배열 선언시 [ ] 기호 위치에 따른 차이점
int[] arr1, arr2;
int arr3, arr4[];
- arr1, arr2 모두 int[] 타입 변수로 선언됨
- arr3은 int, arr4는 int[]타입 변수로 선언됨
=> 따라서, 자바에서 추천하는 문법은 데이터타입 뒤에 []명시 하여 사용하는 것을 권장한다.
예제1. int형 배열 공간 5개를 생성(arr)하고, 임의의 정수 5개로 초기화 한 후 출력
int[] arr = new int[5];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;
// 초기화 하지 않을 경우 4번 인덱스는 0으로 자동 초기화됨
for(int i=0; i<arr.length; i++) {
System.out.print(arr[i] + " ");
}
예제2. boolean 타입 배열 3개 생성하고 임의의 boolean타입 데이터 초기화 후 출력
2번 인덱스만 true값으로 초기화
boolean[] arr2 = new boolean[3];
arr2[2] = true;
// 0,1번 인덱스를 초기화하지 않을 겨우 기본값 false로 자동으로 초기화
for(int i=0; i<arr2.length; i++) {
System.out.print(arr2[i] + " ");
}
예제3. string 타입 배열 3개 생성하고 0번 - 차주몽, 1번 - 땅콩이 문자열로 초기화한 후 출력
String[] arr3 = new String[3];
arr3[0] = "차주몽";
arr3[1] = "땅콩이";
for(int i=0;i<arr3.length;i++) {
System.out.print(arr3[i] + " ");
}
예제4. double 타입 5개 저장하는 배열 arr4 생성 후 임의의 4개의 실수로 초기화 후 전체 데이터 차례대로 출력
double[] arr4 = new double[5];
arr4[0]=1.1;
arr4[1]=2.1;
arr4[2]=3.1;
arr4[3]=4.1;
for(int i=0;i<arr4.length;i++ ) {
System.out.print(arr4[i] + " ");
}ㄴ
'JAVA' 카테고리의 다른 글
[JAVA] 배열 내의 데이터에 대한 연산 누적 (0) | 2023.09.11 |
---|---|
[JAVA] 배열(array) (2) (0) | 2023.09.11 |
[JAVA] 생성자(constructor) (0) | 2023.09.11 |
[JAVA] 메서드 오버로딩을 사용하여 계산기 클래스 만들기 (0) | 2023.09.11 |
[JAVA] 접근제한자 (0) | 2023.09.11 |