블로그 이름 뭐하지
[JAVA] 배열 본문
여러 개의 변수를 담아 사용할 수 있는 참조형 변수.
한 번에 많은 양의 데이터를 다루거나 계산할 때 사용한다.
기본형 타입 배열
선언
1. 타입[] 변수;
2. 타입 변수[];
//1번 선언방식
int[] intArr;
char[] charArr;
String[] stringArr;
//2번 선언방식
int intArr[];
char charArr[];
String stringArr[];
생성
다른 참조형 변수처럼 new 명령으로 생성하며 [] 대괄호 안에 크기를 지정한다.
배열은 생성될 때 각 *타입별 초기값으로 초기화되어 채워진다.
(타입별 초기값: int는 0, boolean은 false, String은 null)
참조형 변수이므로 실제 값이 아닌 실제 값이 담긴 메모리의 주소값을 저장하고 있다.
int intArr = new int[2]; // 초기값 {0, 0}
boolean boolArr = new boolean[2]; // 초기값 {false, false}
String strArr = new String[2]; // 초기값 {"", ""}
조회
1. 단건 조회
배열의 특정한 값을 하나 뽑아 조회하는 방식
대괄호 안에 순번(index)을 넣어 조회한다.
2. 다건 조회(순회)
배열의 모든 값을 조회하는 방식
다건 조회와 비슷하나, for문을 사용해 배열을 반복한다.
arr명.length 메서드를 사용해 해당 배열의 길이만큼 반복한다.
int[] intArr = new int[3];
intArr[2]; // 단건조회 : intArr의 3번째 값을 가져온다.
for(int i = 0; i < intArr.length; i++){
System.out.print(intArr[i]);
} // 다건 조회 : intArr 안의 모든 값을 가져온다.
초기화
1. {} 중괄호 사용
2. for문 사용
3. Arrays.fill 메서드 사용
// 배열 초기화
import java.util.Arrays; // Arrays 클래스를 import 해주세요!
public class Main {
public static void main(String[] args) {
//1. {} 중괄호 사용하여 초기화 >> 12345
int[] intArray = {1, 2, 3, 4, 5};
//2. for문을 사용하여 초기화 >> 01234
for (int i = 0; i < intArray.length; i++) {
intArray[i] = i;
}
//3. Arrays.fill() 을 이용한 초기화 >> 11111
// 배열의 주소를 모두 같은값으로 초기화
Arrays.fill(intArray, 1);//배열의 모든 값을 1로 초기화
}
}
복사
1. 얕은 복사
변수 간 대입 연산자(=)를 사용하여 복사하면 주소값만 복사된다.
주소값만 복사되고 실제 값은 1개로 유지되는 것.(변수명은 달라도 값은 하나)
int[] a = { 1, 2, 3, 4 };
int[] b = a; // 얕은 복사
b[0] = 3; // b 배열의 0번째 순번값을 3으로 수정. (1 -> 3)
System.out.println(a[0]); // 출력 3 <- a 배열의 0번째 순번값도 3으로 조회됨
2. 깊은 복사
새로운 배열을 똑같이 만들고 싶을 때 사용
배열의 실제 값을 복사하여 새로운 배열을 생성한다.
1) for문 사용
2) clone() 메서드 사용
3) Arrays.copyOf() 메서드 사용
int[] a = { 1, 2, 3, 4 };
int[] b = new int[a.length];
//1) 깊은 복사: for문 사용
for (int i = 0; i < a.length; i++) {
b[i] = a[i];
}
b[0] = 3; // b 배열의 0번째 순번값을 3으로 수정. (1 -> 3)
System.out.println(a[0]); // 출력 1 <- 깊은 복사를 했기때문에 a 배열은 그대로임.
//2) 깊은 복사: .clone() 메서드 사용
int[] a = { 1, 2, 3, 4 };
int[] b = a.clone();
// 주의 ) 2차원 이상 배열에서는 얕은 복사로 동작한다.
//3) Arrays.copyOf() 사용
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 2. Arrays.copyOf() 메서드
int[] a = { 1, 2, 3, 4 };
int[] b = Arrays.copyOf(a, a.length); // 배열과 함께 length값도 같이 넣어준다.
}
}
String 배열
선언, 생성, 초기화
선언과 생성은 기존 배열과 동일하다.
초기화는 인덱스에 값을 하나씩 넣거나 {} 중괄호에 한번에 넣을 수 있다.
String[] strArr1 = new String[3]; // 선언과 생성
strArr1[0] = "val01" // 하나씩 넣기
strArr1[1] = "val02"
strArr1[2] = "val03"
String[] strArr2 = new String[]{"val01", "val02", "val03"}; //여러개 넣기
String[] strArr3 = {"val01", "val02", "val03"};
String 기능 활용
char[]은 문자 배열이고, String은 문자열이므로 String = char[] 이다.
그럼에도 char[] 대신 String을 사용하는 이유는 참조형 변수인 String이 많은 기능을 가지고 있기 때문이다.
메서드 명 | 리턴 타입 | 설명 |
.length() | int | 문자열의 길이 반환 |
.charAt(int) | char | 문자열에서 해당 index의 문자를 반환 |
.substring(int, int) | String | 문자열에서 해당 index 범위(from~to)에 있는 문자를 반환 (to는 범위 포함 안됨) 매개변수를 하나만 적으면 해당 index부터 String 끝까지 문자를 반환 |
.equals(String) | boolean | 문자열의 내용이 같은지 확인(==은 주소값을 비교하므로) |
.toCharArrays() | char[] | 문자열을 문자배열(char[])로 변환하여 반환 |
new String(charArray) | String | 문자배열을 받아 String으로 복사 후 반환 |
.replace(String, String) | String | (기존의 문자열, 변경할 문자열) 순으로 기입하여 새로운 문자열을 반환 String은 수정이 되지 않으므로, replace로 생성되는 문자열은 기존과 다른 문자열이다. |
.indexOf(String) | int | 문자열 내에서 주어진 문자열의 위치를 반환. (없을 경우 -1을 반환) |
.toLowerCase() .toUpperCase() |
String | 모든 문자를 알파벳 소문자 또는 대문자로 치환하여 새로운 문자열을 반환. |
.trim() | String | 문자열의 앞뒤 공백을 제거한 새로운 문자열을 반환. (중간공백은 제거하지 않음) |
valueOf(type) | String | 기본타입의 값을 문자열로 반환. |
.concat(String) | String | 문자열과 문자열을 이어 반환. |
.startWith(String) .endWith(String) |
boolean | 문자열이 지정된 문자로 시작 또는 끝나는지 확인 (대소문자도 구별한다) |
.split(String) | Spring[] | 지정한 문자로 문자열을 나누어 배열로 사용. |
.contains(String) | boolean | 지정한 문자를 포함하는 지 확인. |
다차원 배열
일반적으로는 1차원 배열을 사용하지만, 배열 안에 배열이 들어간 다차원 배열(보통은 2차원 배열)이 존재한다.
선언
2차원 배열을 선언할 때는 1차원 배열에 대괄호를 하나 더 추가한다
1. 타입[][] 변수
2. 타입 변수[][]
3. 타입[] 변수[]
생성
2차원 배열을 생성할 때도 대괄호를 하나 더 추가한다.
//2차원 배열 선언
int[][] arr01;
int arr02[][];
int[] arr03[];
//2차원 배열 생성
int[][] arr04 = new int[][];
초기화
1. 중괄호를 사용해 선언과 동시에 초기화
2. 선언, 생성 이후 반복문을 이용해 초기화
//1. 중괄호를 이용해 선언과 동시에 초기화
int[][] arr01 = {
{1, 2, 3},
{4, 5, 6}
}
//2. 반복문을 이용한 초기화
int[][] arr02 = new int[2][3];
for(int i = 0; i < arr02.length; i++){
for(int j = 0; j < arr01[i].length; j++){
arr[i][j] = 0;
}
}
가변배열
열의 길이를 생략하고 행마다 다른 길이의 배열을 요소로 지정할 수 있음
// 가변 배열
// 선언 및 초기화
int[][] array = new int[3][];
// 배열 원소마다 각기다른 크기로 지정 가능
array[0] = new int[2];
array[1] = new int[4];
array[2] = new int[1];
// 중괄호 초기화할때도 원소배열들의 크기를 각기 다르게 생성 가능
int[][] array2 = {
{10, 20},
{10, 20, 30, 40},
{10}
};
2차원 배열 이상의 다차원 배열 이해
3차원 배열은 2차원 배열 생성에 대괄호[]를 하나 더해준다
초기화 할때는 중괄호{}를 더해준다
// 중괄호 3개를 써서 3차원 배열 초기화
int[][][] MultiArray = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}};
조회
2차원 배열을 조회할 때는 2중 반복문으로 출력(3차원은 3중 반복문)
// 가변 2차원 배열 조회
int[][] array = {
{10, 20, 30},
{10, 20, 30, 40},
{10, 20}
};
for (int i = 0; i < array.length; i++) { // 1차원 길이
for (int j = 0; j < array[i].length; j++) { // 2차원 길이
System.out.print(array[i][j]); // 2중 반복문으로 i, j 인덱스 순회
}
}
// 출력
10 20 30 10 20 30 40 10 20
'JAVA' 카테고리의 다른 글
[JAVA] 객체 지향 프로그래밍의 이해 (1) | 2024.09.20 |
---|---|
[JAVA] 컬렉션 (0) | 2024.09.20 |
[JAVA] 조건문, 반복문 (0) | 2024.09.20 |
[JAVA] 연산자 (2) | 2024.09.19 |
[JAVA] 변수 (0) | 2024.09.19 |