1. 배열이란 ? ?
같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 '배열'이라고 한다.
여기서 중요한 것은 '같은 타입'이라는 것이다.
만약 한 학원 5명의 학생들의 점수를 저장하기위해 변수를 선언하기 위해서는
int score1, int score2, int score3, int score4, int score5 ;
이렇게 선언을 해야한다. 5명까지도 괜찮지만 100명 정도의 변수를 선언하려면 상당히 곤혹스러울 것이다. 하지만 배열을 이용하면 간단히 처리할 수 있다.
int [] score = new int[5] ; // 5개의 int를 저장할 수 있는 배열 생성
0 |
0 |
0 |
0 |
0 |
score[0] score[1] score[2] score[3] score[4]
위의 배열 선언으로 위의 표와같이 메모리에 int형 데이터를 저장할 수 있는 공간이 나란히 형성된다. 그리고 각 배열요소는 자동적으로 int의 기본값인 0으로 초기화 된다.
생성된 배열의 각 저장공간을 '배열의 요소'라고 하며, '배열이름[인덱스]'의 형식으로 배열의 요소에 접근한다. 인덱스는 배열의 요소마다 붙여진 일련번호로 각 요소를 구별하는데 사용된다. 인덱스는 0부터 시작한다는 것이다. 위표의 아래에 score1[0]=100;이라고하면 첫 번째요소에 100이 저장되는 것이다.
앞서 말했듯이 배열은 메모리상에 나란히 배치되기 때문에 순차적으로 접근이 가능하다. 따라서 for문을 통해 순차적으로 접근하거나 내용을 입력할 수 있다. 위와같이 순차적으로 배열요소에 접근하여 입력값을 넣고 출력도 할 수 있다.
그리고 for문의 조건식 배열의 길이를 직접 적어주는 것보다 '배열이름.length'를 사용하는 것이 좋다. 이렇게 하면 '배열이름.length'는 상수가 되므로 실수를 줄여줌으로써 안정적인 코드에 기여한다.
(1) 배열의 초기화 !
int[] score = new int[]{50, 60, 70, 80 , 90};
int[] socre = {50, 60, 70, 80, 90};
둘다 같은 초기화이며 new int{}를 생략할 수 있다. 또, 배열의 길이는 초기화 수에 맞춰서 자동으로 채워준다.
(2) 배열의 복사 !
System.arraycopy를 통해서 배열을 복사 할 수 있는데,
첫번째인자는 복사할 배열이고 두번째 인자는 어디서부터 복사할건지,
세번쨰인자는 어느 배열에 복사할지, 네번째인자는 몇번쨰 인덱스부터 복사를 받을지,
마지막 다섯번째인자는, 길이를 최대얼만큼 복사할지를 뜻한다.
(3) 배열의 오름차순!
위 예제는 배열의 값을 오름차순으로 바꾸는 코드인데,
첫번째 인덱스와 다음 인덱스를 비교해서 인덱스 값이 더 크면 그 자리를 바꾸면서 진행하고 있다.
2.String 배열이란?
(1) 선언과 생성
배열의 타입이 String인 경우에도 int배열의 선언과 생성방법은 다르지 않다.
3개의 문자열 (String)을 담을 수 있는 배열을 생성하는 문장은 다음과 같다.
String[] name = new String[3];
(2) String배열의 초기화
초기화 역시 int형 배열과 동일한 방법으로 한다.
String [] name = { "Kim", "Park", "Lee" };
(3) char 배열과 String클래스
String클래스는 사실 char배열에 매서드를 추가한 것이다. 따라서 String클래스는 여러가지의 매서드가 있는데 그 기능은 다음 표와 같다.
메서드 |
설명 |
char charAt(int index) |
문자열에서 해당 위치에 있는 문자를 반환한다. |
int length() |
문자열의 길이를 반환한다. |
String substring(int from, int to) |
문자열에서 해당 범위(from~to)에 잇는 문자열을 반환한다. 단, to는 범위에 포함되지 않는다. |
boolean equals(String str) |
문자열의 내용이 같은지 확인한다. 같으면 결과는 true, 다르면 false가 된다. |
char[] toCharArray() |
문자열을 문자배열로 변환해서 반환한다. |
3.다차원 배열??
방금까지 본 배열은 1차원배열 인데, 2차원 이상의 배열을 다차원 배열이라고한다.
다차원 배열은 2차원배열을 배우면 거의 반자동으로 알 수 있으며, 3차이상은 잘 쓰이지도 않는다.
(1) 2차원 배열의 선언과 인덱스
2차원 배열을 선언하는 방법은 1차원 배열과 같다. 단, 괄호[]가 하나 더 들어갈 뿐이다.
타입[][] 변수이름; // int[][] arr;
타입 변수이름[][]; // int arr[][];
타입[] 변수이름[]; // int[] arr[];
2차원 배열의 인덱스 구성은 int[행][열]로 이루어져있고
만약, int[][] arr = new int[4][3] 이렇게 선언을 했다면 다음과 같이 공간이 마련된다.
arr[0][0] |
arr[0][1] |
arr[0][2] |
arr[1][0] |
arr[1][1] |
arr[1][2] |
arr[2][0] |
arr[2][1] |
arr[2][2] |
arr[3][0] |
arr[3][1] |
arr[3][2] |
(2) 2차원 배열의 초기화
2차원 배열도 괄호 {}를 사용해서 생성과 초기화를 동시에 할 수 있는데 1차원 배열보다 {}를 한번 더 사용하여 행별로 구분해 준다.
위의 선언을 초기화 하자면
int[][] arr = {
{1,2,3},
{4,5,6},
{7,8,9},
{10,11,12}
};
이런식으로 초기화를 한다.
(3) 빙고 만들기
(4) 행렬 곱하기
다차원 배열의 반복문을 이해하는데 좋은 문제가된다고 생각한다.
'Foundation > - Java' 카테고리의 다른 글
변수와 메서드 (0) | 2017.07.26 |
---|---|
객체지향언어란(클래스, 객체) (0) | 2017.07.26 |
제어문 - 반복문(for, while, do-while) (0) | 2017.07.20 |
제어문 - 조건문(if,switch) (0) | 2017.07.19 |
연산자 (0) | 2017.07.17 |