본문 바로가기
BackEnd/Java

JAVA] 배열(Array) - 배열

by pplucy 2020. 11. 12.

** 배열의 사용이유

: 타입이 같은 데이터가 여러개 필요한 경우 배열을 사용해서 관리해주면 된다, 이건 배열을 통해 여러 데이터를 하나의 변수로 다룰 수 있기 때문이다.

  * 변수(레퍼런스)를 통해 배열에 접근할 수 있고, 인덱스를 통해 배열 안의 데이터에 접근할 수 있다.

 

** 배열생성방법

 String[] sArr = new String[ 5 ];   --> String 타입의 데이터를 5개 보관하는 배열 생성 (배열생성과 동시에 초기화 해줌)

(배열은 아파트를 만드는 것이라고 생각하면 쉽다 !  String 만 입주할 수 있는 5칸짜리 아파트 생성 !!)

 

** 인덱스

    - 저장한 데이터의 경우 인덱스를 통해 접근할 수 있는데,

       이 인덱스는 0부터 카운트 된다.

       (5칸짜리 아파트이지만 0층부터 있다고 생각하면 된다)

System.out.println("3번째 인덱스 값 " + sArr[3]);

--> 3번째 인덱스에 있는 값을 출력할 수 있다.

System.out.println("sArr의 주소값 : " +  sArr);

--> 인덱스 출력없이 배열만 입력하게 되면 배열이 참조하고 있는 주소값만 나온다.

 

 

** 배열 복사하기

1) 얕은 복사

Stirng[] foodArr = new String[] {"김밥", "라면", "떡볶이"};

---> 여기서 String[] copyArr = foodArr;

이렇게 하게 되면, copyArr이 foodArr이 가지고  있는 주소값을 가지게 된다.

그렇기 때문에 배열 안에 담겨있는 값만을 복사한 것이 아니라 배열을 참조하는

그 주소값을 그대로 가져오게 되는 것! (배열은 참조형) 

 

--> 그 결과 만약, foodArr 에서 인덱스 값을 변경하면 같은 주소값을

     참고하고 있는 copyArr에서도 그 바뀐 인덱스 값을 반영하게 된다.

 

 

2) 깊은 복사

- 배열이 같은 주소값을 가지게 하는 것이 아닌, 배열 안에 들어있는

  데이터 값들만을 옮겨오고 싶을 때는 옮기길 원하는 배열값의 크기만큼

 새로운 배열을 생성해준 뒤에 이 안에 데이터값들을 옮겨 넣는 형태로 복사해야한다.

 

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
        public void test3() {
            
            //깊은 복사해보기
            //foodArr에 있는 내용 그대로 복사하되 따로 정립되도록 배열만들기 !(다른 주소값)
            
            String[] foodArr = new String[] {"김밥""라면""떡볶이"};
            
            String[] copyArr = new String[foodArr.length]; //foodArr에 배열의 길이만큼 복사
            
            // 이 복사한 배열은 현재 값이 없다,빈 아파트만 만들어진 상태 !
            // 원래 있던 값들을 옮겨주기 !
              
            for (int i = 0; i < copyArr.length; i++) {
                
                //copyArr의 i번쨰 인덱스에 foodArr의 i번쨰 인덱스값 대입시키기.
                copyArr[i] = foodArr[i];
            }
            
                
                //copyArr의 인덱스값 바꿔봐서 둘이같은 주소값을 가지고 있는지 확인해보기
                copyArr[1= "쫄면";
                
            System.out.println("foodArr: " + Arrays.toString(foodArr));
            System.out.println("coopyArr: " + Arrays.toString(copyArr));
                
            
        }
        
cs

 

3) 배열의 위치 바꾸기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
        public void test4() {
            //자리바꾸기
            
            int[]Arr = {3,4,5};
            
            System.out.println("before : " + Arrays.toString(Arr));
            //배열값을 {5,4,3}으로 바꿔주기
        
            int num = Arr[0]; // 인덱스 0의 값을 복사
            Arr[0= Arr[2]; //인덱스 0값에 인덱스 2값을 대입
            Arr[2= num; // 인덱스 2값에 num의 값을 대입
            
            System.out.println("after : " + Arrays.toString(Arr));
            
        }
cs

 

 

댓글