본문 바로가기

Foundation/- Java

배열(array), String배열, 다차원배열

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

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