배열(Array)에 대해 알아보자.
배열은 인덱스와 인덱스에 대응하는 데이터들로 이루어진 연속적인 자료구조로, 같은 종류의 데이터들이 순차적으로 저장된다. 1차원 배열은 타입이 같은 둘 이상의 데이터를 저장할 수 있는 1차원 구조의 메모리 공간을 말한다. C/C++에서와 비슷한데, 대신 생성하는 단계가 좀 다르다.
//배열에 대한 레퍼런스 변수 선언
int intArray[];
//배열 생성
intArray = new int[5];
//한꺼번에 하기
int[] intArray = new int[5];
int intArray[] = new int[5];
//배열 생성과 초기화 동시에 하기
int[] intArray = new int[] {1, 2, 3, 4, 5};
int[] intArray = {1, 2, 3, 4, 5};
배열 선언시 무심코
int intArray[5];
같은 실수를 하면 안된다. 자바에서는 컴파일 오류가 난다(경험담이다). 저렇게 쓰는 건 배열 내 값에 접근할 때 쓴다.
int[] intArray = new int[5]; //배열 생성 및 선언
intArray[0] = 5; //인덱스가 0인 원소에 5 저장
intArray[1] = 6; //인덱스가 1인 원소에 6 저장
int n = intArray[1]; //변수 n에 인덱스 1의 값을 저장. n=6이 된다.
다차원배열도 구현할 수 있다. 2차원 배열만 간단히 만들어봄. length 의미가 1차원 배열과는 다르니 주의!
//2차원 배열의 레퍼런스 변수 선언
int[][] intArray;
int intArray[][];
//2x5의 차원 배열 생성
intArray = new int[2][5];
//한꺼번에 하기
int[][] intArray = new int[2][5];
int intArray[][] = new int[2][5];
//배열 생성과 초기화 동시에 하기
int[][] intArray = {{0, 1, 2, 3, 4}, {5, 6, 7, 8, 9}};
//length의 의미
int size1 = intArray.length;
int size2 = intArray[0].length;
int size3 = intArray[1].length;
size1과 size2, size3는 각각 어떤 값을 가질까?
- size1은 2차원 배열의 행의 개수, 2이다.
- size2는 0번째 행에 있는 열의 개수, 5이다.
- size3는 1번째 행에 있는 열의 개수, 5이다.
2차원 배열은 다수의 1차원 배열을 엮어서 구성한 것이라고 이해하면 편하다.
1) 배열의 초기화 메소드
fill(int[] a, int fromIndex, int toIndex, int val)
- 원하는 값으로 배열 전부 또는 일부를 채울 때 사용하는 메소드
- 인덱스 fromIndex ~ (toIndex-1)의 범위까지 val의 값으로 배열 초기화
- java.util.Arrays 클래스에 정의되어 있다.
2) 배열의 복사 메소드
arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
- 한 배열에 저장된 값을 다른 배열에 복사할 때 사용하는 메소드
- 복사할 원본의 위치: 배열 src의 인덱스 srcPos
- 복사 대상의 위치: 배열 dest의 인덱스 destPos
- 복사할 요소의 수: length
- java.lang.System 클래스에 정의되어 있다.
<예시코드>
import java.util.Arrays;
import java.lang.System;
public class FinalTermTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr1 = new int[10];
int[] arr2 = new int[10];
Arrays.fill(arr1, 7); //배열 arr1을 7로 초기화
System.arraycopy(arr1, 0, arr2, 3, 4); //배열 arr1을 arr2의 3번째 인덱스로 4칸만큼 복사
for(int i = 0; i < arr1.length; i++)
System.out.print(arr1[i] + " ");
System.out.println();
for(int j = 0; j < arr2.length; j++)
System.out.print(arr2[j] + " ");
}
}
(클래스 이름).(메소드 이름) -> 이렇게 불러오는 것 잊지말자.
3) For-each 문
Enhanced for문이라고도 한다. 기존의 for문을 변형하여, 배열이나 나열의 크기만큼 루프를 돌면서 각 원소를 순차적으로 접근하는데 유용하게 만든 for문이다.
for (참조변수 : 배열 레퍼런스) {
.... 반복 작업문 ....
}
import java.util.*;
public class FinalTermTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] n = {1, 2, 3, 4, 5};
String names[] = {"탄산수", "두유", "젤리", "커피", "사탕"};
int sum = 0;
for (int k : n) {
System.out.print(k + " ");
sum += k;
}
System.out.println("합은 " + sum);
for (String s : names)
System.out.print(s + " ");
}
}
'coding > Java' 카테고리의 다른 글
[Java] 추상클래스, 추상메소드, 인터페이스 (0) | 2020.12.20 |
---|---|
[Java] 상속과 참조변수, instanceof 연산자 (0) | 2020.12.20 |
[Java] 배열(2) - 실습 (0) | 2020.12.20 |
[Java] String 클래스 (0) | 2020.12.20 |
[Java] 메소드 오버로딩과 오버라이딩, Overloading vs Overriding (0) | 2020.12.20 |