JAVA

[JAVA] OneDimensionArray(1차원배열)

주옹스 2020. 7. 29. 11:25

배열(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