** 배열의 사용이유
: 타입이 같은 데이터가 여러개 필요한 경우 배열을 사용해서 관리해주면 된다, 이건 배열을 통해 여러 데이터를 하나의 변수로 다룰 수 있기 때문이다.
* 변수(레퍼런스)를 통해 배열에 접근할 수 있고, 인덱스를 통해 배열 안의 데이터에 접근할 수 있다.
** 배열생성방법
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 |
'BackEnd > Java' 카테고리의 다른 글
[JAVA] DTO 와 VO의 차이점 (0) | 2024.03.13 |
---|---|
Java] 객체지향 - 추상화, 캡슐화 (0) | 2020.11.16 |
JAVA] 반복문 - While문/ doWhile문/ for문 /이중for문/ continue/ break (0) | 2020.11.12 |
JAVA] 형변환 테스트 (0) | 2020.11.11 |
JAVA] 상수 테스트 / 오버플로우 테스트 (0) | 2020.11.11 |
댓글