배열이란
배열(array)은 같은 타입의 변수들로 이루어진 유한 집합으로, 연관된 정보를 그룹화하는 데 사용합니다.
배열은 같은 종류의 데이터를 많이 다뤄야 하는 경우에 사용할 수 있는 가장 기본적인 자료 구조입니다.
배열을 구성하는 각각의 값을 요소(element)라고 하며, 배열에서의 위치를 가리키는 숫자를 인덱스(index)라고 합니다. 배열은 선언되는 형식에 따라 1차원 배열, 2차원 배열뿐만 아니라 그 이상의 다차원 배열로도 선언할 수 있습니다.
하지만 현실적으로 이해하기가 쉬운 2차원 배열까지가 많이 사용됩니다.
배열의 개념
배열이라는 것이 왜 필요할까요?
학교를 예로 들자면 학교는 학생이 다니고 그 학생들을 관리하기 위해 학생들이 소속된 반이라는 개념이 있습니다.
개별적인 학생들을 위한 조직이지만 이 개별적인 학생을 잘 관리하려면 학생들을 반이나 학년이나 초, 중, 고, 대학교라는 형태의 학교라는 개념으로 묶어서 관리할 필요가 있습니다.
바로 이러한 목적으로 우리는 반이나 학년, 학교 같은 개념을 만들었습니다.
일종의 소속된 구성원을 필요에 따라 묶는 개념이 바로 배열인 것인데요.
학교도 처음에는 규모가 작았기 때문에 특별한 것이 필요하지 않았는데 점점 규모가 커지면서 학교는 반이라는 개념, 학년이라는 개념이 필요한 것이고, 컴퓨터에서 파일이라는 개념, 폴더라는 개념이 필요해지는 것입니다.
1차원 배열
1차원 배열은 다음과 같은 문법에 따라 선언합니다.
1
|
타입[] 배열이름; // String [] class={홍길동,김철수,김영희}
|
cs |
int, String, boolean과 같은 데이터 타입이 타입이며, 마찬가지로 배열도 데이터 타입입니다.
변수는 그릇이고 그 그릇에 담아낼수 있는 데이터의 형식, 즉 데이터 타입을 지정한 뒤 대괄호( [] ) 처리를 해야 합니다. 대괄호는 데이터의 모임이라는 의미가 되는 것입니다.
그다음 홍길동, 김철수, 김영희라는 class 변수에 담을 데이터가 나아야 합니다.
이 데이터는 중괄호( {} )로 감싸며 쉼표로 구분합니다.
위와 같이 선언된 배열은 new 키워드를 사용하여 실제 배열로 생성할 수 있습니다.
1
|
타입[] 배열이름 = new 타입[배열길이]; // ->즉, String[] class=new String[3];
|
cs |
배열의 길이는 해당 배열이 몇개의 배열 요소를 가지게 되는지 명시합니다.
주석 처리된 String [] class=new String [3];부분에서 [3]에 해당하는 값을 영어로는 인덱스(index), 한국어로는 색인이라고 합니다.
자바에서 인덱스는 언제나 0부터 시작하며, 0을 포함한 양의 정수만을 가질 수 있습니다.
첫 번째 값을 가져올 때는 인간처럼 1을 쓰는 것이 아닌 0부터 시작한다는 것을 기억해야 합니다.
그래서 1이라고 적으면 홍길동이 아닌 김철수가 나올 것입니다.
<배열 예제 boolean형>
다음 예제는 boolean형 데이터를 4개 저장할 수 있는 배열을 선언과 동시에 생성하고 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
boolean B1 = false; // 기존에 배열을 학습하기전 선언했던 방식
boolean B2 = B1; // 기존에 배열을 학습하기전 선언했던 방식
boolean B3 = false; // 기존에 배열을 학습하기전 선언했던 방식
boolean B4 = true; // 기존에 배열을 학습하기전 선언했던 방식
// 배열을 이용해 선언하는 방식
boolean[] bArray = new boolean[4]; // 길이가 4인 boolean형 배열의 선언 및 생성
bArray[0] = false;
bArray[1] = B1;
bArray[2] = bArray[0];
bArray[3] = true;
//
System.out.println(bArray[0] + ":" + bArray[1] + ":" + bArray[2] + ":" + bArray[3]);
System.out.println(java.util.Arrays.toString(bArray));
|
cs |
인덱스의 범위는 0에서 부터 시작한다고 앞서 서술한 바 있습니다.
따라서 bArray 변수에 저장된 인덱스 범위는 0~3까지 4개인 점을 꼭 기억해야 합니다
배열의 내용을 출력하려면 Arrays.toString()을 사용해야 합니다.
<실행결과 boolean형>
false:false:false:true
[false, false, false, true]
7번째줄 boolean [] bArray=new boolean [4]가 의미하는 바는 무엇일까요?
배열의 변수는 참조변수에 속합니다.
배열도 객체이므로 힙 영역에 생성되고 배열 변수는 힙 영역의 배열 객체를 참조하게 됩니다.
따라서 new 선언 및 생성을 해주지 않으면 해당 배열은 null값을 가지며 null값을 가진 상태에서 배열을 활용하려고 하면 Null Pointer Exception 오류가 발생할 것입니다.
아래의 다른 예제들도 살펴보시기 바랍니다.
<배열 예제 int형>
1
2
3
4
5
6
7
8
9
10
11
12
|
int i1=5; //기존에 배열을 학습하기전 변수를 선언했던 방식
int i2=23; //기존에 배열을 학습하기전 변수를 선언했던 방식
//배열을 이용해 선언하는 방식
int iArray[]=new int[4]; //길이가 4인 int형 배열의 선언 및 생성
iArray[0]=1;
iArray[1]=i1;
iArray[2]=iArray[0]+iArray[1];
iArray[3]=iArray[2]+4;
System.out.println(iArray[0]+":"+iArray[1]+":"+iArray[2]+":"+iArray[3]);
System.out.println(java.util.Arrays.toString(iArray));
|
cs |
해당 예제도 인덱스는 0에서부터 시작하므로 iArray 변수에 저장된 인덱스 범위는 0~3까지 4개입니다
배열의 문법은 "타입[] 배열 이름;" 혹은 "타입 배열 이름[];" 모두 동일합니다.
<실행결과 int형>
1:5:6:10
[1, 5, 6, 10]
<배열 예제 double형>
1
2
3
4
5
6
7
8
9
10
11
12
|
double d1 = 5.3; // 기존에 배열을 학습하기전 변수를 선언했던 방식
double d2 = 23.2; // 기존에 배열을 학습하기전 변수를 선언했던 방식
// 배열을 이용해 선언하는 방식
double dArray[] = new double[4]; // 인덱스 범위 0~3까지 4개
dArray[0] = 1;
dArray[1] = d1;
dArray[2] = dArray[0] + dArray[1];
dArray[3] = dArray[2] + 4.4;
System.out.println(dArray[0] + ":" + dArray[1] + ":" + dArray[2] + ":" + dArray[3]);
System.out.println(java.util.Arrays.toString(dArray));
|
cs |
<실행결과 double형>
1.0:5.3:6.3:10.7
[1.0, 5.3, 6.3, 10.7]
<배열 예제 String형>
1
2
3
4
5
6
7
8
9
10
|
String str1 = new String("hello1");
String str2 = new String("hello2");
String[] sArray = new String[4];
sArray[0] = str1;
sArray[1] = str2 + str1;
sArray[2] = sArray[0];
sArray[3] = sArray[0] + "world";
System.out.println(java.util.Arrays.toString(sArray));
|
cs |
String은 객체이기 때문에 new String로 선언해야 합니다
<실행결과 String형>
[hello1, hello2hello1, hello1, hello1 world]
위의 예제처럼 0부터 시작하는 인덱스(index)를 이용하면 각각의 배열 요소에 따로 접근할 수 있습니다.
또한, 배열 grade2grade 2처럼 배열의 길이보다 적은 수의 배열 요소만을 초기화할 경우, 나머지 배열 요소들은 배열의 타입에 맞게 자동으로 초기화될 것입니다.
2차원 배열
ㄴㅇㄹ
'개발자였던 것 > JAVA 기초' 카테고리의 다른 글
자바 문자열 함수/ length(), length, equals(), format() (0) | 2020.04.03 |
---|---|
클래스의 구성 (0) | 2020.03.24 |
조건문 (0) | 2020.03.07 |
문자의 입력과 출력-Scanner (0) | 2020.03.06 |
반복문 (0) | 2020.03.05 |