자바에서 배열 선언 및 초기화하기
배열이란?
자바에서 배열은 같은 자료형의 값들을 연속적으로 저장하기 위한 자료구조입니다. 마치 서랍장에 같은 종류의 물건을 칸별로 정리해 놓는 것과 비슷합니다. 각 서랍에 해당하는 자리를 인덱스라고 부르며, 이 인덱스를 통해 특정 값에 접근할 수 있습니다.
배열 선언과 생성
자료형[] 배열이름 = new 자료형[배열의 크기];
- 자료형: 배열에 저장할 데이터의 타입 (예: int, double, String)
- 배열이름: 배열을 식별하기 위한 이름
- 배열의 크기: 배열에 저장할 수 있는 요소의 개수
예시:
int[] numbers = new int[5]; // 정수 5개를 저장할 수 있는 배열 생성
String[] names = new String[3]; // 문자열 3개를 저장할 수 있는 배열 생성
배열 초기화
배열을 생성한 후에는 각 요소에 초기값을 할당해야 합니다. 초기화하는 방법에는 크게 두 가지가 있습니다.
선언과 동시에 초기화
자료형[] 배열이름 = {값1, 값2, 값3, ...};
int[] scores = {80, 90, 75}; // scores 배열에 80, 90, 75를 초기값으로 할당
for문을 이용한 초기화
for (int i = 0; i < 배열의 크기; i++) {
배열이름[i] = 값;
}
int[] numbers = new int[5];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = i * 10; // numbers 배열의 각 요소에 10, 20, 30, 40, 50을 할당
}
배열 요소에 접근하기
배열이름[인덱스]
- 인덱스: 0부터 시작하는 정수 값으로, 배열의 각 요소를 가리킵니다.
int[] numbers = {10, 20, 30};
int firstNumber = numbers[0]; // firstNumber에는 10이 저장됨
예제: 학생들의 점수를 저장하는 배열
int[] scores = new int[5];
scores[0] = 85;
scores[1] = 92;
scores[2] = 78;
scores[3] = 95;
scores[4] = 88;
System.out.println("첫 번째 학생의 점수: " + scores[0]);
핵심 정리
- 배열은 같은 자료형의 값들을 연속적으로 저장하는 자료구조입니다.
- 배열을 선언하고 생성할 때 크기를 지정해야 합니다.
- 배열 요소는 인덱스를 사용하여 접근합니다.
- 배열은 다양한 방법으로 초기화할 수 있습니다.
주의:
- 배열의 인덱스는 0부터 시작합니다.
- 배열의 크기를 넘어서는 인덱스를 사용하면
ArrayIndexOutOfBoundsException
예외가 발생합니다.
다음에 알아보면 좋을 내용:
- 다차원 배열
- 배열 복사
- 배열 관련 메소드 (Arrays 클래스)
자바 배열 선언 및 초기화 예시 코드
정수형 배열 선언 및 초기화
// 방법 1: 선언과 동시에 초기화
int[] numbers = {10, 20, 30, 40, 50};
// 방법 2: 먼저 선언하고, for문을 이용하여 초기화
int[] scores = new int[5];
for (int i = 0; i < scores.length; i++) {
scores[i] = i * 10 + 80; // 각 요소에 80, 90, 100, 110, 120 할당
}
문자열 배열 선언 및 초기화
// 방법 1: 선언과 동시에 초기화
String[] names = {"Alice", "Bob", "Charlie"};
// 방법 2: 먼저 선언하고, 각 요소에 값 할당
String[] fruits = new String[3];
fruits[0] = "apple";
fruits[1] = "banana";
fruits[2] = "orange";
실수형 배열 선언 및 초기화
// 방법 1: 선언과 동시에 초기화
double[] prices = {1.99, 2.99, 3.99};
// 방법 2: 먼저 선언하고, for문을 이용하여 초기화
double[] heights = new double[4];
for (int i = 0; i < heights.length; i++) {
heights[i] = 1.7 + i * 0.1; // 각 요소에 1.7, 1.8, 1.9, 2.0 할당
}
다차원 배열 (2차원 배열 예시)
// 2차원 배열 (행렬 형태)
int[][] matrix = new int[3][4]; // 3행 4열의 2차원 배열 생성
// 각 요소에 값 할당
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
matrix[i][j] = i * 4 + j;
}
}
배열 요소 출력
// 정수형 배열 출력
for (int i = 0; i < numbers.length; i++) {
System.out.print(numbers[i] + " ");
}
System.out.println();
// 향상된 for문을 이용한 출력
for (int number : numbers) {
System.out.print(number + " ");
}
설명
- 선언과 동시에 초기화: 배열을 선언하는 동시에 중괄호
{}
안에 초기값을 나열하여 초기화합니다. - 먼저 선언하고 초기화: 먼저
new
연산자를 사용하여 배열을 생성하고, 각 요소에 개별적으로 값을 할당하거나 for문을 사용하여 반복적으로 값을 할당합니다. - 다차원 배열: 여러 개의 차원을 가진 배열로, 행렬과 같은 형태로 데이터를 저장할 수 있습니다.
- 향상된 for문: 배열의 모든 요소를 순서대로 반복하며 처리할 때 사용하는 간편한 방법입니다.
더 자세한 내용은 아래와 같은 키워드로 검색해보세요:
- 자바 배열 예제
- 자바 다차원 배열
- 자바 향상된 for문
자바에서 배열을 대체할 수 있는 방법
자바에서 배열은 데이터를 효율적으로 관리하는 데 유용하지만, 유연성이 부족하고 크기가 고정되어 있어 때로는 다른 자료구조를 사용하는 것이 더 적합할 수 있습니다. 배열을 대체할 수 있는 대표적인 자료구조는 다음과 같습니다.
List 인터페이스
- 장점:
- 크기가 동적으로 변함.
- 다양한 메소드를 제공하여 데이터 추가, 삭제, 검색 등을 편리하게 수행.
- 여러 종류의 List 구현체 (ArrayList, LinkedList 등)를 선택하여 사용 가능.
- 단점:
- 주요 구현체:
- ArrayList: 배열을 기반으로 구현되어 빠른 임의 접근이 가능하지만, 중간에 요소를 삽입하거나 삭제할 때 성능이 저하될 수 있음.
- LinkedList: 노드를 연결하여 구현되어 중간에 요소를 삽입하거나 삭제할 때 효율적이지만, 임의 접근은 상대적으로 느림.
Set 인터페이스
- 장점:
- 중복된 요소를 허용하지 않음.
- 순서가 보장되지 않음.
- 단점:
- 주요 구현체:
- HashSet: HashMap을 이용하여 구현되어 빠른 검색이 가능하지만, 순서가 보장되지 않음.
- TreeSet: TreeMap을 이용하여 구현되어 요소가 정렬된 상태로 유지됨.
Map 인터페이스
- 장점:
- 키와 값의 쌍으로 데이터를 저장.
- 키를 통해 값에 빠르게 접근 가능.
- 단점:
어떤 자료구조를 선택해야 할까?
- 데이터의 특징:
- 중복을 허용해야 하는가?
- 순서가 중요한가?
- 임의 접근이 필요한가?
- 삽입/삭제가 빈번한가?
- 필요한 기능:
- 검색, 정렬, 추가, 삭제 등
- 성능:
예시
// List 예시
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
// Set 예시
Set<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(1); // 중복된 값은 추가되지 않음
// Map 예시
Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 30);
ages.put("Bob", 25);
결론
배열을 대체할 수 있는 다양한 자료구조가 존재하며, 각각의 장단점을 고려하여 적절한 자료구조를 선택해야 합니다. 문제 해결에 필요한 기능과 데이터의 특성을 정확히 파악하고, 각 자료구조의 특징을 이해하는 것이 중요합니다.
- 어떤 상황에서 ArrayList를 사용해야 할까요?
- HashSet과 TreeSet의 차이점은 무엇인가요?
- Map 인터페이스를 이용하여 학생들의 성적을 관리하는 프로그램을 만들고 싶습니다. 어떻게 해야 할까요?
java arrays