2021. 4. 12. 22:38ㆍ코 딩 공 부/J A V A
개요
배열(array)이란?
크기와 성격이 같은 일련의 원소들이 모여 공동의 집합 구조를 갖는 자료의 집합체를 의미하는 것으로 동질(homogeneous)적인 성격을 가진 자료들에 대해 개별적으로 자료 형을 부여하지 않고 하나의 이름을 가지고 처리할 목적으로 사용된다.
배열의 특징
● 배열은 동일한 타입의 여러 변수들을 하나의 묶음으로 다루는 것이다.
● 배열의 각 요소는 메모리상에 연속적으로 저장된다.
● 배열의 이름(참조형 변수, 레퍼런스 변수)은 연속된 메모리 공간에 저장된 값을 참조하기 위한 참조 값(포인터)을 갖는다.
● 자바의 배열은 객체이므로 Heap에 메모리가 할당되며 Object클래스의 메소드도 사용할 수 있다.
● 배열은 처음 설정한 크기를 변경할 수 없다. 배열의 크기를 변경하기 위하여 다시 메모리를 할당하는 경우 기존 배열은 garbage collector의 대상이 된다.
● 배열에 접근하기 위한 첨자는 int형(32bit)를 사용한다. (byte, short, char 도 가능)
● garbage collector
가비지 컬렉터는 힙영역에 할당된 더이상 사용되지 않는 메모리인 가비지를 다른 객체가 사용할 수 있도록 해제하는 것으로 프로그램 수행을 위한 여유 메모리가 부족하거나 사용자의 입력을 기다릴 때 처럼, 프로그램이 실행되지 않을 때 수행하며 JVM이 자동 처리하므로 객체의 소멸에 신경쓰지 않아도 된다.
배열 선언과 메모리 할당
배열 선언
자료형(타입) 또는 배열명(변수) 뒤에 대괄호([])를 붙여 배열을 선언한다.
● 형식
자료형 [] 배열명; 또는 자료형 배열명[];
- 자료형(타입)은 어떤 종류의 데이터를 사용할 것인지를 나타내는 것으로 기본 자료형과 레퍼런스 자료형 모두 사용 가능하다.
- 배열의 선언은 값을 저장할 공간이 만들어지는 것이 아니라 배열의 요소를 참조할 변수(레퍼런스 변수)를 만드는 것이다.
메모리 할당
배열은 선언 후 연속적으로 메모리상에 값을 저장할 메모리 공간을 new 연산자를 이용하여 할당한다.
● 배열 선언 후 메모리 할당
자료형 [] 배열명;
배열명 = new 자료형[크기];
● 배열 선언과 동시에 메모리 할당
자료형 [] 배열명 = new 자료형[크기];
메모리를 할당할 때 배열의 크기는 int형(32bit)을 사용한다. 만약 음수 크기의 배열을 생성하려고 할 때는 런타임 오류가 발생하게 된다.
배열은 new 연산자를 이용하여 메모리를 할당한 경우 타입이 숫자형인 경우는0, 객체는 null로 초기화가 자동으로 이루어진다.
● 배열의 멤리 할당에 따른 초기값
● 배열의 메모리 할당에 따른 타입 별 초기값
배열의 이용과 초기화
배열의 이용
● 배열 요소의 이용
배열 요소를 이용하기 위해서는 아래 형식처럼 배열명과 인덱스(첨자)를 이용하며, 첨자는 int형(32bit)를 사용한다.
- 형식
배열명[첨자]
이때 첨자(인덱스)는 0부터 "배열 전체 요소의 개수-1" 까지 사용할 수 있다.
● length필드
배열의 크기는 length라는 필드를 이용하여 확인하며, 배열명.length와 같은 형식으로 사용한다.
● 향상된 for 문
for(type itr-var : iterableObj){
실행문
}
type : iterableObj 객체에 저장된 값의 타입
itr-var : iterableObj 객체에 저장된 값을 하나씩 넘겨받을 변수 명
iterableObj : 배열이나 Iterable 인터페이스를 구현한 컬렉션 객체
● for 문을 이용한 배열의 전체 요소 접근
int [] arr = new int [5];
arr[0]=2; arr[1]=4; arr[2]=6; arr[3]=8; arr[4]=10;
for(int i=0; i<arr.length; i++){
System.out.println(arr[i]);
}
● 향상된 for 문을 이용한 배열의 전체 요소 접근
int [] arr = new int [5];
arr[0]=2; arr[1]=4; arr[2]=6; arr[3]=8; arr[4]=10;
for(int n : arr){
System.out.println(n);
}
배열의 초기화
배열은 다음과 같이 선언과 동시에 메모리 할당과 초기화를 할 수 있다.
int [] arr = new int [] {10,20,30,40,50};
또는
int [] arr = {10,20,30,40,50};
그리고 다음과 같이 배열 선언 후에 초기화를 할 수 있다.
int [] arr;
arr = new int [] {10,20,30,40,50};
이렇게 하면 컴파일러는 배열의 초기값 개수 만큼 메모리를 할당하고 해당 값으로 배열 요소를 초기화 한다.
하지만 다음과 같이 초기화는 할 수 없다.
int [] arr;
arr = {10,20,30,40,50};
두 래퍼런스 변수가 하나의 배열을 공유
배열의 크기를 변경한 경우
배열의 배열
2차원 배열의 선언과 메모리 할당
자바는 다차원 배열 대신 배열의 배열을 지원한다.
● 2차원 배열 선언
자료형 [] [] 변수;
또는
자료형 변수 [] [];
또는
자료형 [] 변수 [];
● 2차원의 배열 선언 후 메모리 할당
자료형 [] [] 변수;
변수 = new 자료형 [크기] [크기];
● 2차원 배열 선언과 동시에 메모리 할당
자료형 [] [] 변수 = new 자료형 [크기] [크기];
[] 의 개수가 차원의 수를 의미하며 2차원 배열은 배열 객체에 대한 배열로 3차원 배열은 2차원 배열 객체에 대한 배열이라고 볼 수 있다. 이런 식으로 다차원 배열을 생각할 수 있다.
● int [] [] a = new int [3] [4]; 에서의 length 필드
a.length : a 배열의 행수로 3을 나타낸다.
a[0].length : a배열 0행의 열수로 4를 나타낸다.
● int [] [] a = new int [3] [4]; 의 기억 장소 형태
가변 배열
자바는 배열의 배열에서 마지막 차수의 크기를 다르게 지정 할 수 있다.
배열의 배열 초기화
● 2차원 배열의 초기화
● 가변 배열의 초기화
배열 관련 메소드
System.arraycopy 메소드
지정된 위치에서 시작하여 지정된 소스 배열을 대상 배열의 지정된 위치에 빠르게 복사한다.
● 형식
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
Object src : 복사하고자 하는 소스 배열(원본)
int srcPos : 소스 배열의 시작 위치
Object dest : 복사하려는 대상
int destPos : 목적지(dest)의 데이터 개시 위치
int length : 복사되는 배열 요소 수
명령행 인수(command line argument)
명령행 인수
main 함수는 하나의 인수를 가지며 인수는 외부에서 특정 값을 main 함수로 전달 받을 목적으로 사용되는 것으로 이때 사용되는 인수를 명령행 인수(command line argument)라 한다.
● 예제 프로그램
public class ArgTest{
public static void main(String[] args){
for(int i=0; i<args.length; i++){
System.out.println(args[i]);
}
}
}
예제 프로그램을 ArgTest.java로 저장하고 컴파일 한 후 다음과 같이 실행 했다면,
C:\source>java ArgTest jsp servlet html
args에는 다음과 같이 값이 전달된다.
args[0] <- jsp
args[1] <- servlet
args[2] <- html
'코 딩 공 부 > J A V A' 카테고리의 다른 글
JAVA - 객체 지향 프로그래밍 (0) | 2021.04.13 |
---|---|
JAVA - 제어문 (0) | 2021.03.24 |
JAVA - 연산자 (0) | 2021.03.16 |
JAVA - 기본 프로그램(2) (0) | 2021.03.08 |
JAVA - 기본 프로그램(1) (0) | 2021.03.05 |