º Language º/Java

[자바기초] 배열 정리노트

Poony 2023. 3. 17. 20:54

만약 100명의 점수를 입력받아 출력하는 프로그램을 작성해야 한다면 다음과 같이 변수 100개를 만들어야 합니다.

int score1, score2,score3, .... score100;

이것은 상상만 해도 끔찍한 일입니다. 일일이 언제 변수를 100개를 만드냐...

 

 

* 배열이란? 

 

이와 같이 자료형이 같은 변수가 많~이 필요할때에 일일이 변수이름을 정하지 않고 대표하는 이름을 정해주고 몇개가 필요한지 크기를 정해주어 한꺼번에 필요한 만큼 변수를 선언할 수 있어요.

이것을 "배열"이라고 합니다.

- 배열 : 자료형이 같은 기억장소의 모임
 
 
 * 배열을 사용하는 방법?
 
int []a;		//배열의 선언
a = new int[100];	//배열의 생성

 

예를 들어보죠. 한번에 배열을 선언하면서 정수형으로 변수 100개를 생성하여 만들어보겠습니다.

int []a = new int[100];

> 위 문장을 통해 정수형 변수 100개가 만들어집니다. 그 100개의 변수를 대표하는 이름이  'a' 입니다.

 

- 배열을 통해 만들어진 변수들을 '배열의 요소'라고 합니다.

- '배열의 요소'에 접근하기 위해서는 배열의 이름과 '인덱스'를 사용합니다.

- 자바에서 인덱스는 0번째 부터 사용합니다.

 

a[0] = 1;

> 따라서, 첫번 째 요소에 1을 저장하기 위해서 위의 코드처럼  a[0]의 인덱스부터 출발합니다.

만약 배열의 크기가 5일때, 사용할 수 있는 배열의 요소는 a[0], a[1], a[2], a[3], a[4] 입니다.

배열의 크기가 5일때 a[5] 요소는 없다는 것입니다.

배열의 크기가 n일때에 사용할 수 있는 인덱스는 0 ~ n-1 까지 입니다.

[ ]   [ ]  [ ]  [ ]   [ ]
a[0] a[1] a[2] a[3]  a[4]

 

연습)

1)30개의 원소를 가지는 int형 배열로 studentNumbers 변수로 참조된다.
int []studentNumbers = new int[30];

2) 100개의 원소를 가지는 double형 배열로 profits 변수로 참조된다.
double []profits = new double[100];

3)2000개의 원소를 가지는 char형의 배열로 propverbs 변수로 참조된다.
char []propverbs = new char[2000];

4) 1.2, 3.3, 6.7 과 같은 값을 가지는 double배열을 생성하고 초기화한다.
double []data = {1.2, 3.3, 6.7};

 

연습)

int[] employee = new int[5]; 와 같은 배열 선언이 있다.

1) 유효한 인덱스 범위는?

- 0,1,2,3,4

2) 만약 employee[5]와 같이 원소를 접근하였다면 어떤 일이 발생하는가?

- 컴파일은 되지만 실행오류가 발생한다.

 

연습)

사용자에게 배열의 크기를 물어보고 그 크기대로 배열을 생성하는 문장을 작성하라.

double []readings;

int n;

System.out.println("배열의 크기는?");
n = scan.nextInt();
readings = new double[n];

 

 

* 배열의 초기값

 

 - 배열은 자동으로 초기값을 갖습니다.

int	0
double	0.0
boolean	false
String	null

 

 

 

 

* 2차원 배열

 

 - 2차원의 배열은 1차원 배열의 묶음이라고 생각하면 됩니다.

 

int []a = new int[4];
	---> 1차원 배열
	---> 정수형 변수가 4칸 있어요
         
	 0 1 2 3
	[][][][]

> 1차원 배열의 예시입니다. 이를 2차원으로 바꾼다면 아래와 같습니다.

 

  		   행 열
int [][]a = new int[3][4]
	---> 정수형 변수 4칸 짜리가 3줄 있어요
    
            열
        0  1  2  3
      0[ ][ ][ ][ ]	
   행 1[ ][ ][7][ ]
      2[ ][ ][ ][ ]

	   a[1][2] = 7;

> 위와 같이 앞에있는 배열은 행을 뜻하고 뒤는 열을 뜻합니다. 

 

 

 

 

* 3차원 배열

 

 -3차원의 배열은 2차원 배열의 묶음이라고 생각하면 됩니다.

 
int [][][]a = new int[2][3][4];

	[][][][]
	[][][][]
	[][][][]

	[][][][]
	[][][][]
	[][][][]

> 배열을 [][][] 세개 씩 써주면 됩니다. 순서대로 면, 행, 열 입니다. 2차원 행열을 한개 더 만드는 꼴입니다.

 

 

* 행마다 열의 크기가 다를 수 있을까?

 

- 자바에서는 가능합니다. 각 행마다 열의 크기가 달라질 수 있습니다. 

int [][]a = new int[3][];
a[0] = new int[2];
a[1] = new int[5];
a[2] = new int[3];

[][]
[][][][][]
[][][]

> 위의 코드와 같이 행에 3의 숫자를 넣어두고 열은 비워둡니다.

이렇게 각 행마다 열의 값을 따로 생성해주면 각기 다른 크기의 행열이 만들어 질 수 있습니다.