자바 자료구조 파헤치기 #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];



Categories:

Updated:

Leave a comment