[JAVA] OneDimensionArray(1차원배열)
배열(Array)이란?
- 크기와 성격이 같은 일련의 원소들이 모여 공동의 집합 구조를 갖는 자료의 집합체를 의미.
- 동질적인 성격을 가진 자료들에 대해 개별적으로 자료형을 부여하지 않고 하나의 이름을 가지고 처리할 목적으로 사용
배열의 특징
- 배열의 각 요소는 메모리상에 연속적으로 저장
- 배열의 이름(참조형 변수,레퍼런스 변수)는 연속된 메모리 공간에 저장된 값을 참조하기 위한 참조 값을 가짐
- 자바 배열은 객체이므로 "Heap"에 메모리가 할당되며 Object클래스의 메소드도 사용할 수 있음
배열을 초기화 시키지않아도 컴파일오류 발생하지 않는다. 자동으로 0으로 초기화 되어있음
- 배열은 처음 설정한 크기를 변경 할 수 없다.
배열의 크기를 변경하기 위하여 다시 메모리를 할당 하는 경우 기존 배열은 garbage collector의 대상이 된다.
garbage collector?
힙 영역에 할당된 더 이상 사용되지 않는 메모리인 가비지를 다른 객체가 사용할 수 있도록 해제하는 것.
-> 프로그램 수행을 위한 여유 메모리가 부족하거나 사용자의 입력을 기다릴 때처럼, 프로그램이 실행되지 않을 떄 수행하며
JVM이 자동 처리하므로 객체의 소멸에 신경쓰지 않아도 됨
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package ex0729;
public class Array_Ex3_GarbageCollector {
public static void main(String[] args) {
int a[] = new int[3]; //Heap영역
a[0] = 10; a[1]=20; a[2]=30;
System.out.println("배열의 크기가 3인 경우");
for(int i = 0; i<a.length; i++) {
System.out.print(a[i]+" ");
}
System.out.println();
// 배열은 배열의 크기를 변경할 수 없다.
// 배열의 크기를 변경하면 이전배열은
// garbage collector(메모리회수)의 대상이 된다.
a = new int[5]; //Heap영역
System.out.println("배열의 크기가 5인 경우");
for(int i = 0; i<a.length; i++) {
System.out.print(a[i]+" ");
}
}
}
|
cs |
- 배열에 접근하기 위한 첨자는 int형을 사용 ( byte, short, char도 가능 )
배열의 선언
1) 선언 및 할당
자료형 변수[] = new 자료형[할당할 크기];
int []a = new int[5];
2) 선언과 동시에 초기화
2-1) 자료형 []변수 = new 자료형[]{넣을 데이터};
int []a = new int[] {1,2,3,4,5};
초기화할 때는 []안에 크기를 명시하지 않아도 됨
2-2) 자료형 []변수 = {넣을 데이터}
int []a ={1,2,3,4,5};
3) 선언과 초기화 따로
자료형 []변수;
int []a;
변수 = new 자료형[] {넣을 데이터};
a = new int[]{1,2,3,4,5};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package ex0729;
public class Array_Ex2 {
public static void main(String[] args) {
//배열 선언 및 메모리 할당.
int a[] = new int[5];
int n = 1;
for(int i = 0; i<5; i++) {
a[i] = n;
n+=2; // 1,3,5,7,9
}
//System.out.println(a[0]+","+a[1]);
System.out.println("배열의 길이 : "+ a.length);
for(int i = 0; i<a.length; i++) {
System.out.println(a[i]);
}
//런타임 오류. 첨자는 "배열의 총 요소수-1" 보다 큰 수는 사용불가.
// ArrayIndexOutOfBoundsException 오류 발생 --> 첨자 범위를 넘어서 오류발생
//System.out.println(a[5]);
//향상된 for --> jdk5.0부터 사용 가능.
for(int x : a) // for(자료형 변수 : 배열) { --> 우변은 집합(ex.배열)만 옴
System.out.println(x);
}
}
|
cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | package ex0729; public class Array_Quiz4 { public static void main(String[] args) { //int a[] = new int[5]; // 0으로 초기화 // 1차원 배열의 초기화 (선언과 동시에 초기화) // 초기화할때는 []안에 크기를 명시하지 않는다. int[]a = new int[] {2,4,6,8,10}; //선언과 초기화 따로 int []b; // a = {2,4,6,8,10}; //오류 -->new int를 생략해서는 안됨 b = new int[] {2,4,6,8,10}; // 초기화 할 때, new int[]생략가능 // int []a = {2,4,6,8,10}; int total = 0; for(int n : a) { total += n; System.out.print(n+" "); } System.out.println("합:"+total); } } | cs |
배열의 레퍼런스 참조
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
20
21
22
23
24
25
26
|
package ex0729;
public class Array_Ex4 {
public static void main(String[] args) {
int a[] = new int[3]; //Heap영역
a[0] = 10; a[1]=20; a[2]=30;
//배열은 레퍼런스 참조형이다.
int b[] = a;
b[1]=100; b[2]=200;
System.out.println("a배열...");
for(int n : a) {
System.out.print(n+" ");
}
System.out.println();
System.out.println("\nb배열...");
for(int n : b) {
System.out.print(n+" ");
}
System.out.println();
}
}
|
cs |
코드 참조 : https://github.com/jooyoung0525/SW_Study/tree/master/JAVA/src/ex0729