배열 (2022-06-24)
같은 타입의 데이터를 저장하기 위한 정적인 자료 구조
int score1, score2, score3, score4, score5 ;
데이터가 너무 많으면 수많은 변수를 일일히 지정해야 하기 때문에 '배열'이라는 기능이 필요한다.
위의 int score1~5는 다음과 같이 간단하게 배열로 선언할 수 있다.
int[] score = new int[5] ;
int[] : 데이터 타입과 배열기호[]
score : 배열의 이름인 참조변수
new : 생성자 new
int : 데이터 타입. int[]와 동일해야 한다. string이면 string, int면 int
[5] : 배열의 길이
데이터 타입은 반드시 같은 것을 사용해야 한다.
같은 타입의 데이터를 저장하기 위한 정적인 자료 구조가 배열이기 때문이다.
참조변수는 배열의 이름이다.
대괄호는 데이터 타입 뒤에 붙여도 상관 없고, 참조변수 뒤에 붙여도 상관없다.
생성자 new는 반드시 들어가야 할 형식이다.
제일 마지막의 대괄호 [] 안에는 저장 공간의 길이를 적어주는데
저장 공간은 자동으로 0부터 번호가 붙는다.
이 이름을 인덱스 라고 부른다.
인덱스의 범위는 0부터 (배열길이-1)
5개를 생성했으니 인덱스는 (5-1)인 4번까지 붙는다. (0,1,2,3,4)
인덱스가 붙은 저장 공간을 배열의 요소라고 부른다.
참조변수의 이름을 score라고 붙인다면 각 저장공간을 score[0], score[1].. .라고 부른다.
배열은 연속적이라는 특징이 있다.
배열이름.length - 배열의 길이 (int형 상수)
int[] arr = new int[5];
참조변수가 arr 이고, 길이가 5인 int 타입의 값을 저장하는 배열인데
int tmp = arr.length;
arr.lenght의 값은 5이고, 변수 tmp에 5가 저장된다.
한 번 생성한 배열을 실행하면 길이를 바꿀 수 없다.
그래서 변수가 아닌 상수인 것.
(변하지 않고 항상 같은 같은 값)
배열의 길이, 요소를 출력해보았다.
int[] arr = new int[10];
System.out.println("arr.length = "+arr.length);
for(int i=0; i<10; i++)
System.out.println("arr["+i+"]"+arr[i]);
배열안에 아무런 값을 넣지 않고 선언만 했기 때문에 0이라는 값이 출력된다.
배열의 초기화
배열의 각 요소에 처음으로 값을 저장하는 것
기본적으로 값을 입력하지 않았을 때에는 0으로 초기화가 된다.
초기화 방법 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 = new int[] {50, 60, 70, 80, 90} ;
또는
int[] score = {50, 60, 70, 80, 90} ; // new int[]를 생략할 수 있다.
int[] score;
score = {50, 60, 70, 80, 90} //이렇게 두줄로 나눠쓰면 안된다.
그런데 데이터가 너무 많이 저런식으로 일일히 값을 지정하게 된다면 배열을 쓰는 의미가 없다.
이 때, for문으로 조건을 지정해 각 인덱스에 값을 자동 할당할 수 있다.
for(int i=0; i<score.length; i++) {
score[i] = i * 10 + 50;
System.out.println("score["+score.length+"]="+i);
}
배열의 출력을 다음과 같이 하면 에러가 뜬다.
예외적으로 char 형태의 배열은 에러가 발생하지 않고 제대로 출력된다.
이런 방식도 가능하다.
int[] iArr = { 100, 95, 80, 70, 70 } ;
System.out.println(Arrays.toString(iArr));
배열을 잘 출력하려면
1. for문 사용
2. Arrays.toString() 사용 -> 배열의 내용을 문자열로 반환.