자바 공부5

윤현우·2022년 8월 18일
0

자바공부

목록 보기
5/6
post-thumbnail

📕배열


배열(array)

같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

  • 같은 타입의 여러 개의 변수를 선언해야 할때 손쉽게 다룰 수 있게 해준다.

  • 반드시 '같은 타입'의 변수여야 한다. (서로 다른 타입의 변수들로 구성된 배열은 만들 수 없다.)

  • 배열을 선언하는 방법은 "타입[] 변수이름;" 또는 "타입 변수이름[]" 으로 선언 가능하다.

타입[] 변수이름;	// 배열 선언 (배열을 다루기 위한 참조변수 선언)
변수이름 = new 타입[길이(인덱스)];	// 배열을 생성 (실제 저장공간을 생성)
int[] score = new int[5];	// 5개의 int 값을 저장할 수 있는 배열 생성
int score[] = new int[5];	// 둘 다 사용 가능
  • 값을 저장할 수 있는 공간은 score[0] 부터 score[4]까지 이다.

  • 인덱스(index)는 배열의 요소마다 붙여진 일련번호로 각 요소를 구별하는데 사용된다.

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

  • 변수 score은 배열을 다루는데 필요한 참조변수일 뿐 값을 저장하기 위한 공간은 아니다.

  • 배열을 생성하기 위해서는 연산자 'new'와 함께 배열의 타입과 길이를 지정해 주어야 한다.

  • 길이가 0인 배열도 생성이 가능하다.(필요한 상황이 있을 수 있음)

배열이름.length

배열이름.length 를 통해서 배열의 길이에 대한 정보를 얻을 수 있다.

int[] arr = new int[5];
int tmp = arr.length;	// tmp에 arr배열의 길이인 5 저장
  • 이미 생성된 배열의 길이는 변하지 않으므로 '배열이름.length는 상수이다. 즉 값을 읽을 수만 있고 변경할 수 없다.

  • 배열을 이용한 for문의 조건식에서 자주 사용된다. (범위를 넘어가는 오류 방지)

  • 모든 경우에 배열의 길이를 직접 적어주는 것보다 '배열이름.length'를 사용하는 것이 코드의 관리가 쉽고 에러가 발생할 확률이 적어진다.

배열의 초기화

배열은 생성과 동시에 자동적으로 자신의 타입에 해당되는 디폴트값으로 초기화 된다.

  • 원하는 값으로 저장하려면 각 요소마다 값을 지정해 줘야한다.
int[] score = new int[5];	// 배열 생성
score[0] = 50;		// 각 요소에 직접 값을 저장한다.
score[1] = 60;
score[2] = 70;
score[3] = 80;
score[4] = 90;
  • 자바에서는 배열을 간단히 초기화 할 수 있다.
int[] score = new int[] { 50, 60, 70, 80, 90 };	
/*열의 생성과 초기화를 동시에한다*/
  • 괄호{} 안의 값의 개수에 의해 배열의 길이가 자동으로 결정되기 때문에 괄호[]안에 배열의 길이는 안적어도 된다.
  • 배열 생성과 초기화 동시에 할 때는 'new 타입[]'을 생략할 수 있다.
int[] score = { 50, 60, 70, 80, 90 };	// new int를 생략할 수 있음
  • 다만 배열의 선언과 생성을 따로 하는 경우에는 생략할 수 없다.
int[] score;
score = new int[] { 50, 60, 70, 80, 90 };	// OK.
score = { 50, 60, 70, 80, 90 };	// 에러. new int[]생략할 수 없음

📌<깨알 상식 - Arrays.toString(배열이름)>

이 메서드는 배열의 모든 요소를 문자열로 만들어서 반환한다.

int[] iArr = { 100, 90, 80, 70, 60 };
System.out.println(Arrays.toString(iArr));	// 배열 iArr의 모든 요소 출력
  • 예외적으로 char배열은 println메서드로 출력하면 각 요소가 구분자 없이 그대로 출력된다.

배열의 복사

for문을 이용한 복사

  • 말그대로 더 큰 배열을 생성해 for문을 사용해 이전 배열로부터 내용을 복사하는 방법이다.
int[] arr1 = new int[5];
int[] tmp = new int[arr1.length * 2];

for(int i = 0; i < arr.length; i++) {
	tmp[i] = arr1[i];

arr1 = tmp;    // 참조변수 arr이 새로운 배열을 가리키게 한다. arr1 의 주소가 tmp의 주소로 바뀌고, arr1은 배열 tmp를 가리키게 된다.

System.arraycopy()를 이용한 복사

  • for문을 사용한 복사보다 효율적이다.
System.arraycopy(num, 0, newNum, 0, num.length);
// num [0] 에서 newNum [0]으로 num.length개의 데이터를 복사

📕다차원 배열


2차원 배열

  • 2차원 배열은 주로 테이블 형태의 데이터를 담는데 사용된다.
  • 2차원 배열을 선언하는 방법은 1차원 배열과 같다. 다만 괄호[]가 하나 더 들어갈 뿐이다.
선언방법선언 예
타입[ ][ ] 변수이름;int [ ][ ] score;
타입 변수이름[ ][ ];int score[ ][ ];
타입[ ] 변수이름[ ];int[ ] score[ ];
int [][] score = new int [4][3];	// 4행 3열의 2차원 배열을 생성한다.
  • 2차원 배열의 인덱스(index)도 1차원 배열의 인덱스(index)와 같이 0부터 행/열의 길이 -1 만큼의 범위이다.

2차원 배열의 초기화

  • 2차원 배열도 괄호{}를 사용해서 생성과 초기화를 동시에 할 수 있다.
int[][] arr = new int[][] { {1,2,3}, {4,5,6} };
int[][] arr = { {1,2,3}, {4,5,6} };	// new int[][]가 생략됨

가변 배열

  • 2차원 이상의 다차원 배열을 생성할 때 전체 배열 차수 중 마지막 차수의 길이를 지정하지 않고, 추후에 각기 다른 길이의 배열을 생성함으로써 고정된 형태가 아닌 보다 유동적인 가변 배열을 구성할 수 있다.
int[][] score = new int [5][];	// 두번째 차원의 길이를 지정하지 않는다.
score[0] = new int[3];
score[1] = new int[5];
score[2] = new int[1];
score[3] = new int[2];
score[4] = new int[2];
  • 여기서 score.length의 값은 여전히 5지만, score[0].length의 값은 3이고, score[1].length의 값은 5로 서로 다르다.
  • 가변 배열 또한 생성과 초기화를 동시에 하는것이 가능하다.
int[][] score = {
					{100, 100, 100, 100}
                  , {20, 20, 20}
                  ,	{30, 30}
                  ,	{40, 40, 40, 40}
                  ,	{50. 50, 50}
                };
profile
개발자가 되는 그날까지

0개의 댓글