일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 강아지 종류
- 닥스훈트
- 반려견 열사병
- 강아지
- 반려견 종류
- 강아지 홀리스틱
- 부산 맛집
- 강아지 유기농 사료
- 반려견 홀리스틱
- 반려견 유기농
- 반려견 사료등급
- 반려견
- 티켓팅매크로
- 샤로수길 맛집
- 티켓팅메크로
- 강아지종류
- 홀리스틱 유기농
- 반려견 유기농 사료
- 강아지 유기농
- 동인천 맛집
- 쿠팡매크로
- 반려견 더위
- 자동화봇
- 쿠팡메크로
- 샤로수길 데이트
- 서울대입구 맛집
- 국비지원 예습
- 강아지 열사병
- 강아지 더위
- 신포동 맛집
- Today
- Total
심심한잉여의 잡동사니
JAVA - 1차원 배열 본문
1차원 배열
배열은 같은 자료형의 변수를 하나의 묶음으로 다루는 것
배열은 저장 된 값마다 인덱스 번호가 0부터 시작함.
int[] num = new int[10];
위와 같이 코딩을 하여 사용이 가능하며
배열은 자료형 앞에 [ ] 를 붙여 사용한다.
이렇게 코드를 작성하게 되면 이 배열은 10개의 방이 생겼다고 볼 수 있다.
num[0], num[1], num[2], .... , num[9]
이렇게 0~9까지의 인덱스 번호가 부여되며 0부터 시작하니 총 10개의 방이 있는 것 이다.
int num[] = new int[10];
이렇게도 사용이 가능하지만
현업에서는 앞에 두는것이 더 좋다고 하였다.
배열의 저장구조
배열은 참조형으로 Heap영역에 저장되며 인덱스번호에 따라 메모리 값이 달라진다.
위 코드와 같이 10개의 방으로 작성한다면 int가 10개인 40byte가 할당 된 것이다.
일반 참조형 변수가 단독주택이라면 1차원 배열은 오피스텔에 가까운 느낌이였다.
배열의 초기화
배열의 초기화 방법은 크게 3가지로 나뉜다.
인덱스를 이용한 초기화
// 인덱스를 이용한 초기화
int[] arr = new int[10];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
.
.
.
arr[9] = 10;
// for문을 이용한 초기화
int[] arr2 = new int[10];
for(int i = 0 ; i < arr2.length; i++){
arr[i] = i+1;
}
// 선언과 동시에 초기화
int[] arr3 = new int[]{1,2,3,4,5};
위 코드와 같이 3가지 방법으로 초기화가 가능하지만 보통 for문을 이용하여 초기화를 진행한다고 한다.
배열 얕은 복사
객체의 주소값만 가져와 참조형 변수에 저장하고 하나의 객체를 두변수가 참조하는 것
int[] arr1 = new int[4];
int[] arr2 = arr1;
얕은 복사는 위 코드와 같이 사용을 하며 해당 heap영역에 선언한 arr1의 주소값을 직접 가져오는 것이다.
개인적으로 이해하기로는 arr2라는 변수가 arr1이라는 변수한테 얹혀사는 모습으로 보였다.
배열 깊은 복사
새로운 배열 객체를 생성하여 기존 배열의 데이터를 복사하는 것을 깊은 복사라고 한다.
위 그림과 같이 얕은복사와는 다르게 직접 힙 영역에 선언하여 새로운 주소값에 데이터를 넣는 방법이 깊은 복사이다.
얕은 복사와는 다르게 복사 후 정보를 수정해도 원본 데이터에는 영향이 없기 때문에 활용성이 높다.
방법은 대표적으로 4종류가 있으나 사실상 for문을 이용한 직접 복사하는 것이 현업에서 가장 많이 쓰인다고 했다.
이유는 범위를 직접 생각하고 값을 넣는 시간보다 직접 코딩을하면서 지정해주는 것이 더 빠르기 때문이라고 했다.
int[] arr1 = new int[5];
int[] arr2;
// 직접코딩으로 하는 깊은 복사
for(int i = 0; i<arr1.length;i++){
arr2[i]=arr1[i];
}
// System을 활용 한 복사
System.arraycopy(arr1,0,arr2,0,arr.length); // (복사 할 배열, 시작인덱스, 복사받을 배열, 시작인덱스, 몇개를 복사할지)
// Arrays를 활용 한 복사
arr2 = Arrays.copyOF(arr1, arr1.length); // (복사 할 배열, 복사할 갯수)
// 클론을 활용 한 복사
arr2 = arr1.clone();
위 코드와 같이 복사의 4가지 방법을 알아보았다.
실습 - 깃허브 : https://github.com/thyum3891/kh_java_study/commit/6fefa6b8620e5df1e4203618beca6dd612a29b33
마치며
배열에 들어오니 슬슬 과제를 하는데 많은 시간이 걸리고 머리가 멍해지는 경우도 있다.
계속해서 열심히 하다보면 괜찮아 지지않을까 해서 최대한 많은 과제를 풀 수 있도록 노력해야겠다.
'코딩일기 > Java' 카테고리의 다른 글
JAVA - OOP 객체 지향 프로그래밍 (0) | 2021.08.18 |
---|---|
JAVA - 2차원 배열 (0) | 2021.08.16 |
JAVA - 반복문 (0) | 2021.08.12 |
JAVA - 조건문 (0) | 2021.08.10 |
JAVA - 연산자의 종류와 우선순위 (0) | 2021.08.04 |