배열
public class Array {
public static void main(String[] args) {
int[] arr = new int[] {1, 2, 3, 4, 5};
int[] ar = new int[5];
ar[0] = 1;
ar[1] = 2;
ar[2] = 3;
ar[3] = 4;
ar[4] = 5;
for(int i : arr) {
System.out.println(i);
}
for(int i : ar) {
System.out.println(i);
}
}
}
배열(Array)은 동일한 타입의 여러 값을 하나의 변수로 관리할 수 있는 자료구조입니다. 배열은 크기가 고정되어 있으며, 기본 자료형과 참조 자료형 모두를 저장할 수 있습니다.
배열의 정의와 선언
배열을 간단한 그림으로 그리면 int[] arr = new int[5];를 하게 되면 new int[5]를 보고 힙 메모리에 배열의 길이 5만큼 메모리를 할당하게 됩니다. 하지만 힙메모리는 사용자가 접근할 수 없기 때문에 메모리 주소를 가져올 수 있게해야합니다. 그래서 int[] arr 부분으로 인해 배열의 참조값이 arr에 저장되게 되어 사용자가 배열에 접근할 수 있게 됩니다.
배열 선언에는 두가지로 나뉩니다.
정적 초기화
int[] numbers = new int[]{1, 2, 3, 4, 5};
배열을 선언하면서 동시에 초기값을 설정하는 방식입니다.
정석은 위에 코드로 작성하는 방식이지만 아래 코드와 같이 간략하게 작성할 수 있습니다.
int[] numbers = {1, 2, 3, 4, 5};
동적 초기화
int[] ar = new int[5];
ar[0] = 1;
ar[1] = 2;
ar[2] = 3;
ar[3] = 4;
ar[4] = 5;
이 경우에는 먼저 배열의 크기를 지정한 후 할당받고 난 뒤에 값을 초기화 하는 방식입니다.
다차원 배열
int[][][] arr = new int[2][3][2];
다차원 배열은 흔히 행렬과 선, 면, 입체 등으로 표현합니다. 하지만 이러한 방식에는 3차원이 넘어가는 4차원 5차원 같은 배열을 이해하는데 어려움과 사람들의 혼란을 줄 수 있습니다.
다차원 배열은 메모리상으로 보면 일차원 배열로 구현되어있습니다. 그래서 다차원 배열을 메모리로 이해하자면 앞에서 부터 일직선으로 된 배열을 할당 받은 숫자만큼 나누면 다차원 배열을 이해하기 쉽습니다.
그래서 int[2][3][2] 에서 맨 앞 [2] 부분을 보고 int[2] 를 할당합니다.
그 다음으로 int[2]로 나눈 메모리에 각각 int[3]을 할당해 줍니다.
마지막으로 int[2]를 할당해 주면 다차원 배열을 메모리상에서 구현된 것을 이해할 수 있습니다.
객체 배열
class Car {
private String name;
public Car(String name) {
this.name = name;
}
}
class Main {
public static void main(String[] args) {
// Car 클래스형으로 객체 배열 생성
Car[] car = new Car[2];
car[0] = new Car("Volvo");
car[1] = new Car("Benz");
}
}
객체 배열이란, 자바에서 객체의 참조(주소)를 저장하는 배열을 말합니다. 이 배열은 일반적인 기본 데이터 타입(int, double 등)의 배열과 구조적으로 유사하지만, 배열의 각 요소가 기본 데이터 타입 값 대신 객체의 참조를 저장한다는 점이 다릅니다.
출처
W3Schools.com
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
'언어 > Java' 카테고리의 다른 글
자바 예외처리 (0) | 2024.08.06 |
---|---|
상속 (0) | 2024.08.06 |
문자열 클래스 (0) | 2024.08.03 |
메소드 오버로딩(Method overloading) (0) | 2024.08.03 |
정보 은닉과 캡슐화 (0) | 2024.08.02 |