<목차>
• 배열이란?
배열은 숫자와 문자, 문자열 등의 여러 데이터를 다루면서 어떤 집합이란 것을 숫자나 문자열로만 표현하기 어려울 경우 배열을 사용하게 된다. 이때 자료형 옆에 '[]' 기호를 붙여서 사용한다.
자바에서 배열은 동일한 데이터 타입을 가진 여러 값을 저장하는 자료 구조로 배열은 메모리에 연속적으로 할당되며, 각 요소는 인덱스를 사용하여 접근할 수 있다. 배열은 프로그램에서 데이터를 구조화하고 다루는 데 사용된다.
- 배열의 주요 특징과 개념
1. 고정 길이
배열의 크기는 생성 시에 결정되며, 이후 변경할 수 없다.
2. 동일한 데이터 타입
배열 내의 모든 요소는 동일한 데이터 타입을 가져야 한다.
3. 인덱스
배열의 각 요소는 0부터 시작하는 인덱스를 갖는다. 첫 번째 요소는 인덱스 0, 두 번째 요소는 인덱스 1, 마지막 요소는 길이의 -1을 갖는다.
4. 선언과 생성
배열은 선언과 생성을 변도로 해야 한다. 선언은 배열 변수의 타입을 지정하고, 생성은 실제로 메모리에 공간을 할당하는 단계이다.
5. 배열 초기화
배열을 생성할 때 값을 할당하거나, 나중에 각 요소에 값을 할당할 수 있다.
6. 다차원 배열
배열 내부에 배열을 포함한 다차원 배열이 가능하다. 이를 통해 행렬이나 다차원 데이터를 표현할 수 있다.
7. 예외 처리
배열 인덱스를 벗어나는 접근 시 'ArrayIndexOutOfBoundsException' 예외가 발생할 수 있다.
<예시>
import java.util.Arrays;
public class sample {
public static void main (String[] args) {
// 배열 선언과 생성 방법1
int[] numbers = new int[5];
// 배열 초기화
numbers[0] = 1;
numbers[1] = 3;
numbers[2] = 5;
numbers[3] = 7;
numbers[4] = 9;
// 배열 선언과 생성 방법2(초기값으로 생성)
int[] odds = {1,3,5,7,9};
System.out.println("numbers : " + Arrays.toString(numbers));
System.out.println("odds : " + Arrays.toString(odds));
// 배열 길이
int length = numbers.length;
// 배열 순회
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
// 다차원 배열
int[][] matrix = {
{1,2,3},
{4,5,6},
{7,8,9}
};
System.out.println(Arrays.deepToString(matrix)); // Array.deepToString을 사용해야 다차원 배열이 출력된다.
}
}
<결과>
numbers : [1, 3, 5, 7, 9] odds : [1, 3, 5, 7, 9] 1 3 5 7 9 [[1, 2, 3], [4, 5, 6], [7, 8, 9]] |
배열은 메모리 관리나 데이터 처리에 편리한 도구로, 많은 프로그래밍 시나리오에서 사용된다.
하지만 크기가 고정되고 성능 이슈가 있을 수 있으므로, 상황에 따라 다른 자료 구조를 사용하는 것도 고려해야한다.
• 배열 추가 내용
1. 배열의 길이 설정
배열 생성에 대해서 위 예시에서 두 가지 방법을 사용했다.
배열의 길이를 먼저 만들고, 값을 나중에 대입하거나 처음부터 생성과 값을 같이 지정해 주는 방법
여기서 초기값이 없이 배열을 만든다고 하면 꼭 길이를 지정해서 생성해 주어야만 오류가 발생하지 않는다.
다시 강조하지만 배열의 길이가 생성 시 정해지면 이후에는 변경할 수 없다는 것이다.
만약 기존 배열의 내용을 수정하고 싶다면 새로운 배열을 생성한 후 기존 배열의 내용을 복사해야 한다.
이는 배열의 불변성과 관련된 특징이다.
<예시>
public class sample {
public static void main (String[] args) {
String[] month = new String[12]; // 초기값이 없다면 항상 길이를 만들어 줘야 한다.
month[0] = "1월";
month[1] = "2월";
month[2] = "3월";
month[3] = "4월";
month[4] = "5월";
month[5] = "6월";
month[6] = "7월";
month[7] = "8월";
month[8] = "9월";
month[9] = "10월";
month[10] = "11월";
month[11] = "12월";
for (int i = 0; i < month.length; i++){
System.out.println(month[i]); // 차례대로 출력된다.
}
}
}
2. 특정 배열의 인덱스 값 출력
배열의 특정 위치의 값만 출력하기 위해서는 인데스를 활용해야 한다. 이는 파이썬과 많이 비슷하다.
<예시>
public class sample {
public static void main (String[] args) {
String[] month = new String[12]; // 초기값이 없다면 항상 길이를 만들어 줘야 한다.
month[0] = "1월";
month[1] = "2월";
month[2] = "3월";
month[3] = "4월";
month[4] = "5월";
month[5] = "6월";
month[6] = "7월";
month[7] = "8월";
month[8] = "9월";
month[9] = "10월";
month[10] = "11월";
month[11] = "12월";
System.out.println(month[4]); // 5월만 출력된다.
}
}
• 파이썬과의 차이점
파이썬과 자바는 서로 다른 언어이지만 배열을 다룬다는 공통점이 있다. 하지만 두 언어는 다른 언어이며, 따라서 배열을 다루는 방식에도 몇 가지 차이점이 존재한다.
1. 정적 vs 동적 타입
자바는 정적 타입 언어로, 변수의 타입은 컴파일 시에 결정된다. 배열은 생성할 때 타입이 결정되며, 해당 타입의 요소만 저장할 수 있다.
파이썬은 동적 타입의 언어로, 변수의 타입은 실행 시에 결정된다. 리스트(배열에 해당)는 여러 타입의 요소를 혼합하여 저장이 가능하다.
2. 크기 변경
자바의 배열은 위에서도 언급했듯이 생성 시에 크기가 정해지며, 이후에는 크기를 변경할 수 없다.
하지만 파이썬의 리스트는 동적으로 크기를 조절할 수 있다. 예를 들어 'append()', 'remove()' 등의 메서드를 사용하여 요소를 추가하거나 삭제할 때 리스트의 크기가 자동으로 조절된다.
3. 인덱스 범위
자바의 배열은 인덱스를 벗어나면 오류가 발생한다. 파이선의 리스트는 음의 인덱스를 사용하여 뒤에서부터 접근도 가능하다. 예를 들어 '-1'은 마지막 요소를 뜻하며, '-2'는 끝에서 두 번째 요소를 가리킨다.
4. 배열 초기화
자바의 배열은 생성 시에 초기값으로 기본값(0, false 등)으로 채워진다.
반면 파이썬의 리스트는 '[...]' 형태로 생성과 동시에 초기값을 지정할 수 있다.
5. 다차원 배열
자바와 파이썬 모두 다차원 배열을 지원한다. 그러나 다차원 배열을 생성하고 다루는 구문은 차이가 난다.
[파이썬 관련 참고] - https://bluenoa.tistory.com/9
List 자료형과 id()를 통한 변수 복사의 차이
· List 리스트 타입의 자료는 순서성을 갖고, 각각의 요소 값들을 수정이 가능하며 중복된 요소를 갖을 수 있다. 여기서 순서성이 있다는 것은 인덱싱과 슬라이싱이 가능하다는 것이다. 순서성이
bluenoa.tistory.com
'자바(JAVA)' 카테고리의 다른 글
자바 - Map, 집합, 상수 집합 (0) | 2023.08.29 |
---|---|
자바 - 리스트(List) (0) | 2023.08.21 |
자바 - StringBuffer 클래스 (0) | 2023.08.11 |
자바 - 문자 (0) | 2023.08.10 |
자바 - 변수와 자료의 형태 (0) | 2023.08.08 |