배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루며, 많은 양의 같은 타입의 데이터를 다룰 때 유용하다. 배열의 요소에는 인덱스라고 하는 일련번호를 가지고 있으며, 0부터 시작하여 '배열의 길이 - 1'의 인덱스를 가지고 있다.
배열변수 선언
- 타입[] 배열명;
타입 배열명[] 도 사용이 가능하다. 타입 바로 뒤에 와도 상관 없고, 배열 변수명 바로 뒤에 와도 상관없다.
- 배열명.length
배열의 길이를 확인할 수 있다. 배열의 경우 한번 생성하면 실행하는 동안 그 길이를 바꿀 수 없으며, 배열의 길이 변경은 더 큰 배열을 새로 생성한 후에 기존 배열의 내용을 새로운 배열에 복사하여 늘릴 수 있다.
배열 초기화
배열 초기화는 대표적으로 공간만 할당하는 공간할당방식과 값을 직접 삽입하는 직접 삽입 방식이 있다.
공간할당방식
- 타입[] 배열명 = new 타입[길이];
길이 만큼의 공간이 생성되고, 공간만 선언할 경우 각 공간은 타입마다 다른값으로 초기화된다.
자료형 | 기본값 |
boolean | false |
char | '\u0000' |
byte,short,int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d 또는 0.0 |
참조형 | null |
직접 삽입 방식
- 타입[] 변수명 = { 나열하고자 하는 데이터 };
배열의 출력
char 배열의 경우 System.out.println(); 사용하여 배열 출력가능, 그 외의 경우에는 for문을 사용하거나 Arrays class 사용해야함
import java.util.Arrays;
public class Example1 {
public static void main(String[] args) {
int[] iArr1 = new int[10];
int[] iArr2 = new int[10];
int[] iArr3 = {100, 95, 80, 70, 60};
char[] chArr = {'a', 'b', 'c', 'd'};
//iArr1에 1부터 10까지의 값을 지정함(중복없음)
for(int i=0; i < iArr1.length; i++) {
iArr1[i] = i+1;
}
//iArr2에 1~10사이의 난수를 지정함(중복있음)
for(int i=0; i <iArr2.length; i++) {
iArr2[i] = (int)(Math.random()*10) + 1;
}
System.out.println(Arrays.toString(iArr1));
System.out.println(Arrays.toString(iArr2));
System.out.println(Arrays.toString(iArr3));
System.out.println(Arrays.toString(chArr));
System.out.println(chArr);
//for문을 사용해서 출력하는 경우
for(int i=0; i<iArr3.length; i++)
System.out.print(iArr3[i] + " ");
System.out.println(" ");
//향상된 for문
for(int i : iArr3){
System.out.print("향상된 for 문 : " + i + " ");
}
}
}
배열의 복사
배열을 복사할 때 일반 기본형 변수와는 다르게 참조 타입이기 때문에, 배열의 내용을 갱신하면 원본 배열에도 영향을 미칠 수 있다. 이를 방지하기 위해 다른 방식을 통해 배열을 복사해야 한다.
1. 수동 복사 (for 문 사용)
public class Example1 {
public static void main(String[] args) {
char[] num = {'1','2','3','4','5'};
char[] tmp = new char[num.length*2];
for(int i=0; i<num.length; i++)
tmp[i] = num[i];
System.out.println(tmp);
}
}
2. System.arraycopy(src, srcPos, dest, destPos, length); 사용
import java.util.Arrays;
public class Example1 {
public static void main(String[] args) {
char[] abc = {'a','b','c'};
char[] num = {'1','2','3','4','5'};
char[] result = new char[abc.length + num.length];
// abc를 result의 첫번째 요소부터 복사
System.arraycopy(abc, 0, result, 0, abc.length);
// num을 result의 abc.length 이후부터 복사해서 num.length만큼의 길이를 복사
System.arraycopy(num, 0, result, abc.length, num.length);
System.out.println(result);
}
}
String 배열
여러 개의 문자열을 담을 수 있는 배열로 기본값으로 null이 설정된다.
- String[] 배열명 = {"요소1", "요소2", "요소3"};
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
String[] strArr = {"가위", "바위", "보"};
// 배열을 사용해서 랜덤으로 tmp 값이 0일때는 가위, 1일때는 바위, 2일때는 보가 나옴
for(int i=0; i<10; i++) {
int tmp =(int)(Math.random()*3);
System.out.println(strArr[tmp]);
}
}
}
char배열과 String클래스
문자열을 저장할 때 String 타입의 변수를 사용하는 이유는 String 클래스는 char배열에 여러가지 기능(메서드)를 추가하여 확장한 것이기 때문에 String 클래스를 사용하는 것이 문자열을 다루기가 더 편하기 때문이다. string 클래스는 내용을 변경할수 없다.
String 클래스의 주요 메서드 | |
메서드 | 설명 |
char charAt(int index) | 문자열에서 해당 위치(index)에 있는 문자 반환 ex) String str = "ABCDE"; char ch = str.charAt(3); // D |
int length() | 문자열의 길이 반환 |
String substring(int from, int to) | 문자열에서 해당 범위(from ~ to)에 있는 문자열 반환 (to는 범위에 포함되지 않음) ex) String str = "ABCDE"; String str2 = str.substring(1, 4); // BCD |
boolean equals(Object obj) | 문자열의 내용이 obj와 같은지 확인(true/false) |
char[] toCharArray() | 문자열을 문자배열(char[])로 변환해서 반환 |
다차원 배열
테이블 형태의 데이터를 저장하기 위한 배열이다.
- 타입[][] 배열명 = new 타입[행][열];
배열명 = { {요소, 요소, 요소}
,{요소, 요소, 요소}
};
public class Test {
public static void main(String[] args) {
int[][] score = {{100, 100, 200}
,{20, 20, 20}
,{30, 30, 30}
,{40, 40, 40}
};
int sum = 0;
for(int i=0; i<score.length; i++) { //score.length = 4
for(int j=0; j<score[i].length; j++) { //score[i].length = 3
System.out.printf("score[%d][%d]=%d%n",i,j,score[i][j]);
sum += score[i][j];
}
}
System.out.println("sum=" + sum);
}
}
//score[0][0]=100
//score[0][1]=100
//score[0][2]=200
//score[1][0]=20
//score[1][1]=20
//score[1][2]=20
//score[2][0]=30
//score[2][1]=30
//score[2][2]=30
//score[3][0]=40
//score[3][1]=40
//score[3][2]=40
//sum=670
'Backend > Java' 카테고리의 다른 글
Java 기초 문법 : 오버로딩에 대해서 (0) | 2024.05.26 |
---|---|
Java 기초 문법 : 필드(field)와 메서드(method) (0) | 2024.05.21 |
Java 기초 문법 : 클래스와 객체 그리고 인스턴스 (0) | 2024.05.21 |
Java 기초 문법 : 배열의 활용 (0) | 2024.05.19 |
Java 기초 문법 : break, continue (0) | 2024.05.12 |
Java 기초 문법 : 반복문(for, while) (0) | 2024.05.12 |
Java 기초 문법 : 조건문 (if, switch) (0) | 2024.05.12 |
Java 기초 문법 : 연산자 (0) | 2024.05.10 |