배열(Array)

윤재열·2022년 1월 7일
0

Java

목록 보기
7/71

배열(Array)이란?

-같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
-많은 양의 값(데이터를)을 다룰 때 유용하다.
-배열의 각 요소는 서로 연속적이다.

배열의 선언과 생성

타입 또는 변수이름 뒤에 대괄호[]를 붙여서 선언한다.

int [] score = new int[5];	//5개의 int값을 저장할 수 있는 배열을 생성한다.

Ex) int[]score; , String[] name; , int score[]; , String name[];

-배열을 선언한다고 해서 값을 저장할 공간이 생성되는 것이 아니라 배열을 다루는데 필요한 변수가 생성된다.

int[] score;	//배열을 선언한다.(생성된 배열을 다루는데 사용될 참조변수 선언)
score = new int[5];	//배열을 생성한다.(5개의 int값을 저장할 수 있는 공간 생성)
줄여서 쓰면 int [] score = new int[5]; //선언과 생성을 동시에 할 수 있다.

배열의 초기화

-생성된 배열에 처음으로 값을 저장하는 것

int[]score = new int[5];	//크기가 5인 int형 배열을 생성한다.
score[0] = 100;	//각 요소에 직접 값을 저장한다.
score[1] = 90;
score[2] = 80;
score[3] = 70;
score[4] = 60;

int[]score = {100,90,80,70,60};	//이렇게 사용이 가능하다.
int[]score = new int[]{100,90,80,70,60};

int[]score;
score = {100,90,80,70,60};	//Error!

int[]score;
score = new int[]{100,90,80,70,60};	//OK!

배열의 활용

-배열에 값을 저장하고 읽어오기

score[3] = 100;	//배열 score의 4번째 요소에 100을 저장한다.
int value = score[3]	//배열 score의 4번째 요소에 저장된 값을 일겅서 value에 저장.

-'배열이름.length'는 배열의 길이를 알려준다.

//int[]score ={100,90,80,70,60};
for(int i=0; i< score.length; i++){
System.out.prinln(score[i]);
}
package Array;

public class ArrayEx1 {
    public static void main(String[] args) {
        int[]ball = new int[45];    //45개의 정수값을 저장하기 위한 배열 생성.
        for(int i=0; i<ball.length; i++){   //배열의 각 요소에 1~45의 값을 저장한다.
            ball[i] = i+1; } //ball[0]에 1이 저장된다.

            int temp = 0;   //두 값을 바꾸는데 사용할 임시변수
            int j = 0;  //임의의 값을 얻어서 저장할 변수

            //배열에 저장된 값이 잘 섞이도록 충분히 큰 반복횟수를 지정한다.
            //배열의 첫 번째 요소와 임의의 요소에 저장된 값을 서로 바꿔서 값을 섞는다.
            for(int i=0; i<100; i++){
                j=(int)(Math.random())*45;  //배열 범위(0~44)의 임의의 값을 넣는다.
                temp = ball[0];
                ball[0] = ball[j];  //ball[0]와 ball[j]의 값을 서로 바꾼다.
                ball[j] = temp;
            }
            //배열 ball의 앞에서 부터 6개의 요소를 출력한다.
        for(int i=0; i < 6; i++){
            System.out.println(ball[i]+" ");
        }

    }

}

다차원 배열의 선언과 생성

-'[]'의 개수가 차원의 수를 의미한다.
타입[][]변수이름; >int[][]score;
타입 변수이름[][]; >int score[][];
타입[]변수이름[]; > int[] score[];

int[][]score = new int[5][3];	//5행 3열의 2차원 배열을 생성한다.
int[][]score = {(100,100,100),
		(20,20,20),
   		(30,30,30),
    		(40,40,40),
    		(50,50,50),
   	      };

배열의 복사

-for문을 이용한 배열의 복사

int[]number={1,2,3,4,5};
int[]newNumber=new int[10];

for(int i=0; i<number.length; i++){
newNumber[i] = number[i]; //배열 number의 값을 newNumber에 지정한다.

-System.arraycopy()를 이용한 배열의 복사

얇은 복사

-단순히 객체의 주소 값만을 복사하는 것이다.
-때문에 실제로는 하나의 주소 값만을 가지고 서로 간의 값은 바뀌지 않는다.
-대부분 객체를 복사한다는 말은 얕은 복사가 아닌 깊은 복사를 의미한다.
-간단하게 말하면 얕은복사는 한쪽에서 수정이 발생되면 다른쪽에서도 영향을 끼쳐 같아지게 된다.
-복사한 배열에서 어떠한 값을 수정하면 원래 배열에도 변경된 값이 들어가게 됩니다.

public class ArrayShallowCopy{
	public static void main(String[] args){
    	int[] arr1 = {1,2,3};
        int[] arr2 = arr1;
        }
        }
 //" = " 연산자는 '주소를 이어준다' 라고 이해하면되는데,
 위의 예제는 a의 배열을 b배열로 =연산자를 이용ㅇ하여 대입했기에 얕은 복사가 된다.
 즉 참조에 의한복사(같은 주소값을 가짐)
 때문에 arr2의 값을 수정하면 arr1의 값도 같이 수정된다.

깊은 복사

-객체의 실제 값을 새로운 객체로 복사한다.
-복사된 배열이나 원본 배열은 변결될 때 서로간의 값은 바뀌지 않는다.
-주로 Object.clone(), System.arraycopy를 쓴다.

-Object.clone()

ublic class Array_Copy_Clone{
    public static void main(String[] args)  {
        int[] a = { 1, 2, 3, 4 };
        int[] b = a.clone();
    }
}
//만약, 객체 배열의 경우 clone()을 사용하면 깊은 복사가 되지 않는다.
//왜냐하면 객체는 주소값을 가지고 있기 때문이다.(일반 자료형의 배열만 깊은 복사가 가능)
//마찬가지로 2차원 배열도 각각 로우에 대한 주소값이 존재하기에 깊은 복사가 되지 않는다.

-System.arraycopy()

public class Array_Copy_ArrayCopy{
    public static void main(String[] args)  {
        int[] a = { 1, 2, 3, 4 };
        int[] b = new int[a.length];
        System.arraycopy(a, 0, b, 0, a.length);
    }
}
//System.arraycopy(src, srcPos, dest, destPos, a.length); 형식으로 사용한다
//복사할 배열,복사할 배열의위치,붙여넣을 배열,붙여넣을 배열의 시작위치,복사할길이 순서로 들어간다.
profile
블로그 이전합니다! https://jyyoun1022.tistory.com/

0개의 댓글