1. 배열이란?
같은 타입의 여러 변수를 하나로 묶어 낸 형태이다.
개별적인 변수와 달리 배열의 저장공간은 서로 연속적인 배치를 보인다.
2. 배열의 선언과 생성
배열의 선언은 변수의 타입에 []를 붙이는 형태로 선언이 가능하다. (int[] score)
이러한 배열의 선언 시에는 아직 배열의 참조 변수의 저장 공간이 생성되었을 뿐이다.
때문에 배열을 선언하고 나서는 생성을 꼭 해줘야 한다.
배열의 생성은 new 연산자를 통해서 생성이 가능하며, 배열의 타입과 길이를 함께 지정한다. (new int[15];)
이렇게 생성된 배열은 지정한 타입의 기본값으로 초기화 되며,
타입이 참조형 타입인 경우에는 null 값으로 초기화 된다.
또한 생성된 배열의 주소값을 앞서 선언한 참조 변수에 저장하게 된다.
// 1. int 타입의 배열을 참조 변수 score로 선언한다.
int[] score;
// 2. new 연산자를 통해 int 타입의 길이 15인 배열을 생성한다.
// 3. 주소값이 생기고 타입의 기본값으로 초기화 된다.
// 4. 생성된 주소값을 대입 연산자를 통해 참조 변수 score에 저장한다.
score = new int[15];
3. 배열의 길이와 인덱스
배열의 길이는 배열의 생성 시에 지정한 저장 공간의 길이를 나타내며,
인덱스는 저장 공간에 붙은 일종의 일련 번호이다.
길이는 참조변수.length를 통해서 값을 확인할 수 있다.
생성 시의 길이는 변경이 불가능한 상수이며 길이를 변경하기 위해서는 새로 생성해서 기존의 배열을 복사해야 한다.
인덱스는 0부터 시작한다는 특징을 가지고 있다.
이 번호를 사용해서 해당하는 자리의 값을 읽어오거나 저장하는 것이 가능하다.
// 1. int 타입의 참조 변수 score에 길이 15인 배열의 주소를 저장함
// 2. index로는 0 부터 14 까지의 번호를 갖는다.
int[] score = new int[15];
// 3. index 3, 즉 배열의 4번째 자리에 정수 리터럴 56을 저장함(쓰기)
score[3] = 56;
// 4. int score[3]에 있는 데이터를 int 타입 변수 a에 저장함(읽기)
int a = score[3];
배열에 저장하는 리터럴은 저장하려는 배열의 선언 시 타입을 고려하여 넣어야 한다.
또한 index를 활용하여 for 문을 통한 수식도 사용이 가능하다.
for(int i = 0; i < 15; i++) {
// i를 index 처럼 활용하여 값을 넣을 수도 있다.
score[i] = i * 10;
}
배열의 괄호 안에는 수식도 들어갈 수 있으며 그 결과는 반드시 정수여야 한다.
4. 배열의 초기화
배열의 초기화는 배열 생성 시에 지정한 타입의 기본값으로 초기화 된다.
원하는 값을 저장하기 위해서는 직접 하나씩 지정하거나, for 문을 통해 지정하는 방법이 있다.
단 for 문으로 지정하는 방법은 저장하려는 요소에 일정한 규칙이 있어야 가능하다.
// 1. 직접 지정하는 방법
// 1-1. 선언 시에 함께 지정
int[] score = new int[5]{1, 2, 3, 4, 5};
// 1-2. 하나씩 지정
score[0] = 1;
score[1] = 2;
// 2. for문을 활용한 지정 방법
for(int i = 0; i < score.length; i++) {
score[i] = i + 1;
}
1-1 번의 방법에서 배열의 선언과 생성을 같이 하는 경우에는 new int[] 부분을 생략도 가능하다.
5. 배열의 출력
배열의 저장된 내용을 확인하기 위해서는 출력을 해야 할 필요가 있다.
// 1. for문을 활용한 출력
for (int i = 0; i < score.length; i++) {
// 변수의 요소
System.out.println(score[i]);
}
// 2. 메서드 활용한 출력
// 배열의 참조 변수를 매개 변수로 사용
System.out.println(Arrays.toString(score));
2번의 방법을 메서드를 사용하지 않고 참조 변수를 그냥 출력하게 되면,
참조 변수에 저장된 배열의 주소값이 출력된다.
6. 배열의 복사
배열의 길이는 생성 후 변경이 불가하기 때문에,
표면적으로 길이를 늘리는 방법은 원하는 길이를 가진 새로운 배열을 생성하는 방법밖에 없다.
// 1. for 문 활용하기
int[] score = new int[15];
int[] tmp = new int[score.length * 2];
for(int i = 0; i < score.length; i++) {
tmp[i] = score[i];
}
// 원본 참조 변수명을 그대로 사용하려면 주소값을 넘기면 된다.
// score를 복사한 길이가 두배인 tmp의 주소값을 score 참조 변수에 저장한다.
// score는 tmp가 만들어낸 배열을 새롭게 바라보게 된다.
score = tmp;
// 2. System 클래스의 메서드 활용하기
System.arraycopy(원본배열, 복사시작위치, 카피배열, 카피배열의시작위치, 복사길이);
System.arraycopy(score, 0, tmp, 0, score.length);
'JAVA' 카테고리의 다른 글
클래스 메서드와 인스턴스 메서드 (0) | 2022.09.17 |
---|---|
클래스 변수, 인스턴스 변수, 지역 변수, 생성자 (0) | 2022.09.15 |
클래스 객체 인스턴스 (0) | 2022.09.09 |
깊은 복사와 얕은 복사 (0) | 2022.08.24 |
객체 지향 4대 특성 : 다형성, 캡슐화 (0) | 2022.08.22 |