자바 자료구조 파헤치기 #2: String 배열과 다차원 배열 정복
String 배열
String
배열은 문자열 데이터를 여러 개 저장할 수 있는 배열입니다. 기본 자료형 배열과 마찬가지로 선언, 생성, 초기화, 요소 접근을 할 수 있습니다.
선언 및 생성
String
배열을 선언하고 생성하는 방법은 다음과 같습니다.
1
2
3
4
5
6
7
8
9
// 방법 1: String[] 변수 이름;
String[] names;
names = new String[5]; // 5개의 문자열을 저장할 수 있는 배열 생성
// 방법 2: String 변수 이름[];
String cities[];
cities = new String[3]; // 3개의 문자열을 저장할 수 있는 배열 생성
// 선언과 동시에 생성하기
String[] fruits = new String[4]; // 4개의 문자열을 저장할 수 있는 배열 생성
초기화
String
배열을 초기화하는 방법은 다음과 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 직접 초기화
String[] animals = {"dog", "cat", "lion", "tiger"};
// 인덱스 이용한 초기화
String[] colors = new String[3];
colors[0] = "red";
colors[1] = "green";
colors[2] = "blue";
// for 문 이용한 초기화
String[] products = new String[5];
for(int i = 0; i < products.length; i++){
products[i] = "product" + (i + 1);
}
</br></br>
참조형 배열
String
배열은 참조형 배열입니다. 배열에 저장되는 것은 실제 문자열 객체가 아니라, 문자열 객체의 주소입니다. String
객체가 저장되는 공간은 배열이 생성되는 힙 영역이 아니라, 힙 영역 내의 String Constant Pool 영역에 저장됩니다.
char 배열과 String 클래스
String
클래스는 문자열을 다루는 데 사용되는 클래스입니다. 자바에서는 문자열을 String
객체로 표현합니다. char
배열을 이용해서 문자열을 표현할 수 있지만, String
클래스를 더 많이 사용하는 이유는 다음과 같습니다.
String
클래스의 기능:String
클래스는 문자열 조작과 관련된 다양한 메서드 (length()
,substring()
,equals()
,indexOf()
,toUpperCase()
,toLowerCase()
) 등을 제공합니다.- 불변성(Immutability):
String
객체는 한 번 생성되면 내용이 변경되지 않습니다. 따라서 문자열을 변경하는 작업(예: 문자열 연결)은 새로운String
객체를 생성합니다. 이는 메모리 사용 효율성과 스레드 안전성에 기여합니다.
String
클래스의 주요 메서드
다음은 String
클래스에서 자주 사용되는 메서드들입니다.
-
length()
: 문자열의 길이를 반환합니다.1 2
String str = "Hello"; int len = str.length(); // len 값은 5
-
charAt(int index)
: 지정된 인덱스에 있는 문자를 반환합니다.1 2
String str = "Hello"; char ch = str.charAt(0); // ch 값은 'H'
-
substring(int beginIndex, int endIndex)
: 지정된 범위의 부분 문자열을 반환합니다. (endIndex
는 포함하지 않음)1 2
String str = "HelloWorld"; String sub = str.substring(0, 5); // sub 값은 "Hello"
-
equals(Object anObject)
: 두 문자열의 내용이 같은지 비교합니다.1 2 3 4
String str1 = "Hello"; String str2 = "hello"; boolean result = str1.equals(str2); // result 값은 false boolean result2 = str1.equalsIgnoreCase(str2); // result2 값은 true (대소문자 구분 X)
-
toCharArray()
: 문자열을 문자 배열로 변환합니다.1 2
String str = "Hello"; char[] charArray = str.toCharArray(); // charArray는 {'H', 'e', 'l', 'l', 'o'}
char
배열과 String
간 변환
char
배열을 String
객체로, String
객체를 char
배열로 변환하는 방법은 다음과 같습니다.
1
2
3
4
5
6
7
// char 배열을 String 객체로 변환
char[] charArray = {'H', 'e', 'l', 'l', 'o'};
String str = new String(charArray); // str은 "Hello"
// String 객체를 char 배열로 변환
String str2 = "World";
char[] charArray2 = str2.toCharArray(); // charArray2는 {'W', 'o', 'r', 'l', 'd'}
다차원 배열
다차원 배열은 배열의 배열입니다. 2차원 배열은 행과 열로 이루어진 테이블 형태를 표현할 때 사용됩니다.
</br>
선언 및 생성
2차원 배열은 다음과 같이 선언하고 생성할 수 있습니다.
1
2
3
4
5
6
7
8
// 방법 1:
int[][] scores = new int[3][4]; // 3행 4열의 2차원 배열 생성
// 방법 2:
int scores2[][] = new int[3][4];
// 방법 3:
int[] scores3[] = new int[3][4];
- 행: 2차원 배열에서 가로줄을 의미합니다.
- 열: 2차원 배열에서 세로줄을 의미합니다.
초기화
</br>
2차원 배열은 다음과 같이 초기화할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 직접 초기화
int[][] scores = {
{10, 20, 30, 40},
{50, 60, 70, 80},
{90, 100, 110, 120}
};
// for 문을 사용해서 초기화
int[][] scores2 = new int[3][4];
for(int i = 0; i < scores2.length; i++){
for(int j = 0; j < scores2[i].length; j++){
scores2[i][j] = (i + 1) * (j + 1) * 10;
}
}
인덱스 접근
2차원 배열의 각 요소는 행 인덱스와 열 인덱스를 사용하여 접근합니다.
1
2
3
4
5
6
7
int[][] scores = {
{10, 20, 30, 40},
{50, 60, 70, 80},
{90, 100, 110, 120}
};
System.out.println(scores[0][0]); // 출력: 10 (0행 0열)
System.out.println(scores[1][2]); // 출력: 70 (1행 2열)
가변 배열
자바에서 다차원 배열은 배열의 배열로 구현되기 때문에 각 행의 길이가 다를 수 있는 가변 배열을 만들 수 있습니다.
1
2
3
4
int[][] scores = new int[3][];
scores[0] = new int[3];
scores[1] = new int[2];
scores[2] = new int[4];
Leave a comment