자바에서 배열이란...
같은 자료형의 변수를 하나의 묶음으로 다루는 것으로,
배열은 저장된 값마다 인덱스 번호가 0부터 시작하여 설정됩니다.
그림으로 표현한 배열입니다.
배열을 선언하는 방법입니다. 두 가지 모두 가능하죠.
예를 들어, 3 크기의 정수형 배열 변수 arr을 선언한다고 하면,,
int[3] arr; 혹은 int arr[3];
이렇게 하면 됩니다.
그런데
배열은 선언만 하는 것이 아니라, 할당이란 걸 해줘야 하는데요.
배열은 대부분의 자료형과 달리,
참조 변수로서 배열 자체가 주소를 갖지 않고, 참조 형식으로 주소에 접근합니다.
이런 식으로 할당을 하는 것입니다.
배열의 저장구조는 이렇습니다.
배열은 참조 변수로 Heap영역에 할당되며 배열 공간의 주소를 저장합니다.
배열 공간의 주소를 이용해 인덱스를 참조하는 방식으로 값을 처리합니다.
배열의 다양한 초기화 방법입니다.
보통 for문을 이용하여 배열 원소마다 값을 넣어줍니다.
추가로 배열은 다른 배열로 복사가 가능합니다.
복사 종류에는 얕은 복사, 깊은 복사 두 가지가 있습니다.
○ 얕은 복사
얕은 복사란,
객체의 주소 값만 가져와 참조형 변수에 저장하고
하나의 객체를 두 변수가 참조하는 것인데요.
위 그림을 보면
arr2 배열은 생성되지는 않고, 단순히 arr1의 배열의 주소만 받아서
arr1 배열의 원소 값을 그대로 받을 수 있습니다.
하지만 arr1의 원소 값이 바뀌면, arr2의 원소도 의도치 않게 바뀌게 되는 단점이 있습니다.
○ 깊은 복사
깊은 복사란,
새로운 배열 객체를 생성하여 기존 배열의 데이터를 복사하는 것인데요.
얕은 복사의 단점을 보완할 수 있습니다.
위 그림에서와 같이 세 가지 방법으로 복사를 할 수 있습니다.
( System.arraycopy, Arrays.copyof, .clone() )
얕은 복사와 달리 깊은 복사는 새로운 배열을 하나 생성합니다.
그럼 배열의 예제를 살펴봅시다.
배열 예제
난이도 ★☆☆☆☆
예제 1
Q : 길이가 10인 정수 배열을 선언하고 1 ~ 10까지의 값을 배열에
초기화하는 코드를 작성
public static void ex1() {
int arr[] = new int[10];
for(int i=0; i<arr.length; i++) {
arr[i] = i+1;
System.out.print(arr[i]+ " ");
}
System.out.println();
}
public static void main(String[] args) {
ex1();
}
난이도 ★★☆☆☆
예제 2
Q : 길이가 10인 정수 배열을 선언하고 짝수에 해당하는 값을 배열에
순차적으로 초기화하는 코드를 작성
public static void ex2() {
int arr[] = new int[10];
for(int i=0; i<arr.length; i++) {
arr[i] = i * 2 + 2;
System.out.print(arr[i]+ " ");
}
System.out.println();
}
public static void main(String[] args) {
ex2();
}
난이도 ★★★☆☆
예제 3
Q : 길이가 26 인 정수 배열을 선언하고 아스키 문자 영문자(대문자)를 순차적으로
초기화하는 코드를 작성
public static void ex3() {
int arr[] = new int[26];
for(int i=0; i<arr.length; i++) {
System.out.printf("%c ", i+65);
}
public static void main(String[] args) {
ex3();
}
난이도 ★★★★☆
예제 4
Q : 길이가 20 인 정수 배열을 선언하고 홀수에 해당하는 값을 배열에 순차적으로
초기화하는 코드를 작성
단, 99 부터 역순으로 초기화 값을 저장한다.
int[] iArr = new int[20];
int[0] = 99; int[1] = 97;
int[2] = 95; int[3] = 93;
public static void ex4() {
int arr[] = new int[20];
int j=0;
for(int i=99; i>=arr.length; i -= 2) {
if(j == 20) break;
arr[j] = i;
System.out.print(arr[j] + " ");
j++;
}
System.out.println();
}
public static void main(String[] args) {
ex4();
}
난이도 ★★★★☆
예제 5
Q : 생성할 배열의 크기를 사용자 입력을 이용하여 생성한 후 다시 사용자 입력을 이용하여
사용자가 직접 배열의 크기만큼 초기화할 수 있도록 한다.
(생성할 배열 타입은 문자열로 한다.)
public static void ex5() {
int j=0;
System.out.print("1차원 배열의 크기 입력 : ");
int num = sc.nextInt(); sc.nextLine();
String sArr[] = new String[num];
String str = "";
for(int i=0; i<sArr.length; i++) {
System.out.print("배열의 " + (i+1) + "번째 원소 입력 : ");
str = sc.nextLine();
sArr[i] = str;
}
while(j < sArr.length) {
System.out.print(sArr[j]+ " ");
j++;
}
}
public static void main(String[] args) {
ex5();
}
이상 java의 배열을 마치겠습니다.
다음 포스팅에선 이전의 배웠던 내용들을 활용해 실습문제를 풀어보겠습니다..
https://healthdevelop.tistory.com/entry/java7
'Java > Java' 카테고리의 다른 글
[Java] 자바 2차원배열 | java 2차원배열 예제 (java로 웹개발하기)(day08) (0) | 2021.08.03 |
---|---|
[Java] 자바 예제 | 자바 실습문제 | java 예제 (java로 웹개발하기)(day07) (0) | 2021.08.02 |
[Java] 자바 반복문(java for, while,do-while) | 반복문 예제 (java로 웹개발하기)(day05) (1) | 2021.07.29 |
[Java] 자바 반복문(java for, while,do-while) | 반복문 예제 (java로 웹개발하기)(day04) (0) | 2021.07.28 |
[Java] 자바 조건문(java if, switch) | 조건문 예제 (java로 웹개발하기)(day03) (0) | 2021.07.27 |