본문 바로가기
JAVA/자바 문법

배열

by chogigang 2023. 2. 21.

배열 

같은타입의 여러 변수를 하나로 묶어서 관리하는 것이 배열(array)입니다. 배열의

 

 

 

선언과 생성

 

참조 변수를 선언하고 변수 또는 타입에 배열을 의미하는 대괄호[]를 붙이면 됩니다. 연산자

 

선언방법 선언 예
타입[] 변수이름; int score;
String[] name;
타입 변수이름[]; int score[];
String name[];

 

'new'와 함께 배열의 타입과 길이를 지정해 주어야 합니다

 

 

 

타입[] 변수이름;  // 배열을 선언( 배열을 다루기 위한 참조변수 선언)

변수이름  = new 타입길이[길이] ;     //배열을 생성 

 

ex)

 

int [] score;   //int 타입의 배열을 다루기 위한 참조변수 score선언

score = new int[5];  // int 타입의 값 5개를 저장할 수 있는 배열

 

 

배열의 생성과정

int[] score;

int형 배열 참조변수 score를 선언합니다. 데이터를 저장할 수 있는 공간은 아직 마련되지 않습니다.

score = new int[5];                           //0~4

연산자 'new'에 의해서 메모리의 빈 공간에 5개의 int형 데이터를 저장할 수 있는 공간이 마련됩니다.

그리고 각 배열요소는 자동적으로 int의 기본값(default)인 0으로 초기화 됩니다.

                                                                                                                                      

배열의 길이와 인덱스

배열의 요소(=element) : 생성된 배열의 각 저장공간

배열이름[인덱스]의 형식으로 배열의 요소 접근.

인덱스(index)는 배열의 요소 (저장공간 )마다 붙여진 일련번호로 각 요소를 구별하는데 사용됩니다.

인덱스는 0부터 시작합니다.

인덱스(index)의 범위는 0부터 '배열길이-1'까지

예를 들어 길이가5인 배열은 모두 5개의 요소(저장공간)을 가지며 인덱스의 범위는 0-4까지 입니다.

score[3] = 100; // 배열 score의 4번째 요소에 100을 저장한다.
int value = score[3]; // 배열 score의 4번째 요소에 저장된 값을 읽어서 value에 저장

 

 

 

 

배열의 길이

배열의 길이의 최대값은 int타입이여아 합니다.

int[] arr = new int[5];// 길이가 5인 int형 배열

 

 

 

배열 이름 .Length

 

 

int [] arr = new int[5]; //길이가 5인 int배열
int temp = arr.length;   //arr.length의 값은 5이고 tmp에 5가 저장된다.

 

배열은 한번 생성하면 실행동안 길이를 변경할수 없습니다    따라서 '배열이름.length'는 상수 여야 합니다

 

 

배열의 길이 변경하기

배열의 길이는 변경할 수 없는데, 만약 배열의 길이를 늘려야 하는 경우에는 어떻게 해야할까?

배열의 길이를 변경하는 방법
    1. 더 큰 배열을 새로 생성한다.
    2. 기존 배열의 내용을 새로운 배열에 복사

이러한 작업들은 꽤나 비용이 많이 들기 때문에, 처음부터 배열의 길이를 넉넉하게 잡아줘서 새로 배열을 생성해야하는 상황이 가능한 적게 발생하도록 해야 합니다. 그렇다고 해서 배열의 길이를 너무 크게 잡으면 메모리를 낭비하게 되므로, 기존의 2배정도의 길이로 생성하는 것이 좋습니다.

 

 

배열의 초기화

배열은 생성과 동시에 자동적으로 자신의 타입에 해당하는 기본값으로 초기화 되므로 배열을 사용하기 전에

따로 초기화를 해주지 않아도 되지만 원하는 값을 저장하려면 각 요소마다 값을 지정해 줘야합니다.

 

// 초기화 방법 1
int[] score = new int[5];
score[0] = 50;
score[1] = 60;
score[2] = 70;
score[3] = 80;
score[4] = 90;

// 초기화 방법 2
int[] score = { 50, 60, 70, 80, 90 };
// 방법 2는 나눠서 초기화할 수 없다
int[] score;
score = {50, 60, 70, 80, 90};
// 방법 2를 나눠서 초기화할 경우 방법3
int[] score;
score = new int[]{50, 60, 70, 80, 90};

배열 길이가 길경우 for문을 사용하는것이 좋습니다.

 

int[] score = new int[5];  //길이가 5인 int형 배열을 생성합니다.

for(int i=0; i<score.length; i++)
   score[i] = i *10 +50;

for문으로 배열을 초기화하려면 저장하려는 값에 일정한 규칙이 있어야만 가능하기 때문에 자바에서는 다음과 같이 배열을 간단히 초기화 할 수 있는 방법을 제공합니다.

 

int[] score = new int[] { 50, 60, 70, 80, 90 }; // 배열의 생성과 초기화를 동시에

 

괄호{}안에 저장할 값들을 쉼표로 구분해서 나열하면 되며, 괄호[] 안에 배열의 길이는 적지 않는다. 괄호{}안에 적힌 값의 개수에 의해 배열의 길이가 자동적으로 결정되기 때문입니다.

int[] score = new int[]{ 50, 60, 70, 80, 90 };
int[] score = { 50, 60, 70, 80, 90 }; // new int[]를 생략할 수 있음

 

 

배열의 출력

배열을 초기화할 때 for문을 사용하듯이 배열에 저장된 값을 확인할 때도 다음과 같이 for문을 사용합니다.

 

int[] iArr = { 100, 95, 80, 70, 60 }; // 배열의 요소를 순서대로 하나씩 출력

for (int i = 0; i < iArr.length; i++) {

System.out.println(iArr[i]);

}

 

많이 쓰는 방볍은

 

 

int[] iArr = { 100, 95, 80 , 70 , 60};
// 배열 iArr의 모든 요소를 출력합니다 {100,95,80, 70, 60} 이 출력합니다.
System.out.println(Arrays.toString(iArr));

 

 

예외적으로 char배열은 println메서드로 출력하면 각 요쇼가 구분자없이 그대로 출력됩니다.

 

char [] chArr = {'a','b','c','d'};
System.out.println(chArr);  //abcd 가 출력됩니다.

 

배열의 복사

 

큰 배열을 새로 만들고 이전 배열들로부터 내용을 복사해야한다고 했습니다

 

배열을 복사하는 방법은 두가지가 있습니다. 

1.for문을 이용해서 복사하는 방법이 있습니다.

 

    int[] arr = new int[5];
   int[] tmp = new int[arr.length*2]; // 기존 배열보다 길이가 2배인 배열 생성

for (int i = 0; i < arr.length; i++)
      tmp[i] = arr[i]; // arr[i]의 값을 tmp[i]에 저장

      arr = tmp;// 참조변수 arr이 새로운 배열을 가리키게 합니다.

7. 배열의 활용

// 1. 총합과 평균
int sum = 0;
float average = 0f;

int[] score = {100, 88, 100, 100, 90};

for(int i = 0; i < score.length; i++) {
	sum += score[i];
}
average = sum / (float)score.length;

System.out.println("총합 : " + sum);
System.out.println("평균 : " + average);
// 2. 최대값과 최소값
int[] score = {79, 88, 91, 32, 100, 55, 95};

int max = score[0], min = score[0];

for(int i = 1; i < score.length; i++) {
	if(score[i] > max){
    	max = score[i];
    } else if(score[i] < min){
    	min = score[i];
    }
}

System.out.println("최대값 : " + max);
System.out.println("최소값 : " + min);
// 3. 섞기(shuffle)
int[] numArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
System.out.println(Arrays.toString(numArr));

for(int i = 0; i < 100; i++) {
	int n = (int)(Math.random() * 10); 
    int tmp = numArr[0];
    numArr[0] = numArr[n];
    numArr[n] = tmp;
}
System.out.println(Arrays.toString(numArr));

 

8. String배열        의 선언과 생성

 

 

변수 타입의 기본값은 다음과 같습니다. 

 

 

String배열의 초기화

 

 

    String[] name = new String[3]; // 길이가 3인 String 배열을 생성
name[0] = "Kim";
      name[1] = "Park";
      name[2] = "Yi";

      String[] name = new Stirng[]{"Kim", "Park", "Yi"};
      String[] name = { "Kim", "Park", "Yi" }; // new String[]을 생략할 수 있습니다.

 

 

특별히 String클래스만 "Kim"과 같이 큰따움표만으로 간략히 표현하는 것이 허용되지만

원래 String은 클래스이므로 아래의 왼쪽처럼 new연산자를 통해 객체를 생성해야합니다.

 

String[] name = new String[3];                   String[] name = new String[3]; 
name[0] = new String("Kim");                name[0] ="Kim";
name[1] = new String("Park");               name[1] ="Park";
name[2] = new String("Yi");                    name[2] ="Yi";

 

 

 

다차원 배열

 

2차원 배열

2차원 배열은 주로 테이블 향태의 데이터를 담는데 사용 됩니다. 

int[][] score = new int [4][3]; //4행 3열의 2차원배열을 생성합니다.

 

 

    int[][] score = new int[4][3];

- score[column index][row index]
      score[0][0]    score[0][1]    score[0][2]
      score[1][0]    score[1][1]    score[1][2]
      score[2][0]    score[2][1]    score[2][2]
      score[3][0]    score[3][1]    score[3][2]

 

2차원 배열의 index

 

 

2차원 배열의 초기화

 

2차원 배열도 괄호{}를 사용해서 생성과 초기화를 동시에 할 수 있습니다.

 

// 초기 초기화
int[][] arr = new int[][]{{1, 2, 3}, {4, 5, 6}};
// 간소화된 초기화
int[][] arr = {{1, 2, 3}, {4, 5, 6}};
// 주로사용되는 초기화, 간소화된 초기화랑 같으나 그저 가독성을 높여준 작성법
int[][] arr = {
      {1, 2, 3},
      {4, 5, 6}
};

 

 

 

2차원 배열도 이중for문으로 처리 가능합니다.

 

String 클래스 

- String 클래스는 char[] 와 메서드(기능)를 결합한 것입니다.

- String 클래스는 내용을 변경할 수 없습니다. (read only) 

 

String 클래스의 주요 메서드 

메서드 설명
char charAt(int index) 문자열에서 해당 위치 (index)에 있는 문자를 반환
int length() 문자열의 길이를 반환
String subString(int from, int to) 문자열에서 해당 범위 (From ~ to)의 문자열을 반환 (to 포함 X)
Boolean equals(Object obj) 문자열의 내용이 같은지 확인, 같으면 결과는 true, 다르면 false
char[] toCharArray[] 문자열을 문자배열(char[])로 변환해서 반환 

 

 

'JAVA > 자바 문법' 카테고리의 다른 글

if,for,while /try-catch  (0) 2023.04.10
연산자  (0) 2023.02.20
변수  (0) 2023.02.20