오늘은 배열에 대해 포스팅을 해볼까 한다.
우선 배열이 무엇인가?
- 배열(Array) : 같은 자료형들끼리 모아두는 하나의 묶음.
같은 자료형들끼리?
예를 들자면, 도서관에 책의 종류를 분류하여 정리해놓는다. 한국문학은 한국문학끼리, 독일 문학은 독일 문학끼리, 스포츠는 스포츠 관련 책들 이런식으로 정리해 놓는다. 이것처럼 int형은 int형끼리 char형은 char형끼리 String형은 String형끼리 모아두는 하나의 묶음을 배열이라 한다.
배열은 이런식으로 분류할 수 있다.
각각의 설명은 뒷부분에서 설명하겠다.
배열은 선언되는 형식에 따라서 1차원 배열과 다차원 배열로 나눠질 수 있다.
- 1차원 배열의 선언 방식
타입 식별자[](or 타입[] 식별자);
식별자 = new 타입[크기];
- 1차원 배열의 항목을 가르키는 식
식별자[인덱스] = 값;
10 크기의 int형 배열 arr의 각 인덱스에 저 값들이 저장되어 있다.
- 배열의 선언과 초기화를 한꺼번에 하는 방법
타입 식별자[] = {값1, 값2, … , 값n};
현재의 int 형 배열 arr의 메모리를 그려보면 이렇게 나온다.
다차원 배열은 대괄호를 추가해주면 된다.
1번 혹은 2번의 방법으로 선언을 해주고 각 배열의 초기화를 해주던지,
3번의 방법으로 선언과 초기화를 한꺼번에 해줄 수 있다.
다차원 배열을 생성하게 되면 메모리는 이렇게 그려진다.
3차원 배열도 만들기는 하지만 복잡하기 때문에 주로 2차원 배열까지만 만들어 사용하곤 한다.
지금까지는 기본자료형의 1차원 배열과 다차원 배열에 대하여 설명하였다.
보시는 바와 같이 기본자료형 배열의 경우에는 char, byte, short, int, long, float, double형과 같이 기본형으로 이루어진 배열을 뜻한다.
객체형 배열같은 경우는 String과 같이 참조형으로 이루어진 배열을 뜻한다.
객체형 배열을 만들게 되면 메모리는 어떻게 될까.
String으로 예를 들어 보겠다.
String arr[] = {"Java", "Practice"};
이렇게 선언을 하게 되면, 메모리 구조는 이렇게 나타내진다.
객체형 배열의 경우 그 value(값)가 독립적으로 있어 불리는 형태로 메모리에 저장이 된다.
※ 실제 배열을 선언했을 때 메모리에는 인덱스의 값이 없는데 어떻게 유저가 원하는 인덱스를 찾아낼 수 있을까?
메모리 상에서는 인덱스가 따로 없다. 사실 식별자가 가진 주소값을 찾아가서 배열 선언했을 때 지정한 크기만큼 몇번째를 옮겨서 읽는 것이다.
예를 들면서 보면 이해가 갈것이다.
int arr[4] = {1, 2, 3, 4};
System.out.println(arr[2]);
라고 입력함으로써 arr 배열의 인덱스 2의 값을 찾아 출력하라고 명령을 내린다.
그러면 우선 Stack에서 arr가 가진 주소값을 찾아 간다. 그러면 arr 배열의 시작점에 있을 것이다. 거기서 인덱스 2라고 했으니 int형 크기만큼, 즉 4byte만큼 2번 옮기면 유저가 원하는 인덱스 2의 값을 찾을 수 있는 것이다.
그래서 배열은 같은 자료형의 집합인 것이다. 서로 다른 자료형을 모아놨을 경우 인덱스를 찾지 못한다. 일정한 크기가 없어 정확한 값을 읽지 못하기 때문이다.
'PROGRAMMING > JAVA' 카테고리의 다른 글
잠깐) 보수법 (2) | 2013.02.25 |
---|---|
4. 상속(inheritance) (0) | 2013.02.25 |
2. 클래스 (0) | 2013.02.20 |
1. JAVA 기초 (2) | 2013.02.20 |
eclipse 자바독 API 만들기 (126) | 2012.12.21 |