배열
1개의 데이터만 저장할 수 있는 변수는 여러 변수를 생성 하기에 너무 비효율적으로 코드가 길어진다.
배열이란, 여러 데이터를 저장해야 할 때 좀 더 효율적이고 간단하게 여러 데이터를 묶어서 저장하는 방법이다.
많은 양의 데이터를 다루는 프로그램에서 더 효율적인 방법으로 배열을 사용할 수 있다.
배열의 특징
- 배열은 같은 타입의 데이터만 저장할 수 있다.
만약 다른 타입의 데이터 값을 저장하려고 하면 타입 불일치 컴파일 에러가 난다. - 한 번 생성된 배열은 길이를 늘이거나 줄일 수 없다.
(유동적으로 바뀌는 여러 데이터의 저장소를 만들고 싶다면 java의 List를 사용하도록 하자.)
배열 선언
배열을 선언하기 위해서는 우선 배열 변수를 선언해야 한다.
//example code1
int[] intArray;
String[] strArray;
char[] charArray;
double[] doubleArray;
//example code2
int intArray[];
String strArray[];
char charArray[];
double doubleArray[];
배열을 선언하는 방법은 대괄호 []를 사용하여 해당 변수가 배열 형태임을 알려줘야 한다.
위에서 보이는 것처럼 대괄호는 타입 뒤에 붙을 수도 있고 변수 뒤에 붙을 수도 있다.
만약 배열 변수가 null 값을 가진 상태에서 변수[인덱스]로 값을 읽거나 저장하게 되면 NullPointerException 예외가 발생한다.
인덱스
인덱스란 배열 안의 각 데이터에 부여해 놓는 자료구조이다.
인덱스 값을 통해 배열 안의 데이터를 특정하여 출력, 수정, 삭제 등 사용이 가능하다.
int[] intArray = {1, 2, 3, 4, 5};
//intArray[0] == 1
//intArray[1] == 2
//intArray[2] == 3
//intArray[3] == 4
//intArray[4] == 5
인덱스는 위 코드처럼 0부터 시작한다.
즉 배열 안의 첫 번째 값을 가지고 오고 싶다면 해당 배열의 0 번째 데이터를 들고 온다고 입력해야 한다.
//intArray [0] == 출력값: 1
//intArray[4] == 출력값: 4
총인덱스의 길이를 알고 싶을 땐 intArray.length로 알아낼 수 있다.
만약 선언된 인덱스의 길이 이외의 값을 받아오려고 하면 ArrayIndexOutOfBoundsException이 발생한다.
배열 생성
위에서 잠깐 본 코드처럼 다음과 같이 간단하게 배열 객체를 생성할 수 있다.
//타입[] 변수 = {값0, 값1, 값2, 값3, ...};
int[] intArr = {1, 2, 3, 4, ...};
String[] strArr = {"abc", "def", "ghi", ...};
char[] charArr = {'a', 'b', 'c', ...};
.. 이렇게 생성된 배열에서 특정 데이터 값을 바꾸고 싶다면 아래와 같이 할 수 있다.
intArr[0] = 5;
//intArr 0번째의 값 1 대신 5를 대입(변경)한다.
※배열 변수를 이미 선언한 후에는 다른 실행문에서 중괄호를 사용한 배열 생성이 허용되지 않는다.
int[] intArray;
intArray - {1, 2, 3, 4, 5}; //컴파일 에러!!
배열 변수를 미리 선언한 후 값 목록들이 나중에 결정되는 상황이라면 다음과 같이 new 연산자를 사용해서 값 목록을 지정해주면 된다.
String[] names;
names = new String[] {"tomi", "andrew", "jully"};
당연히 메서드의 매개 값이 배열일 경우에도 마찬가지로 배열 변수들이 나중에 결정된다면 new 연산자를 사용하여 매개 값으로 넣어줘야 한다.
int add (int[] scores) {...}
int result = add( {13, 55, 75} ); //<- 컴파일 에러!!
int result = add(new int[] {13, 55, 75});
new 연산자로 배열 생성
만약 데이터를 배열 생성과 동시에 넣어줄 수 없을 때나 미리 배열을 만들어 놓고 나중에 데이터를 대입하고 싶을 때
new 연산자를 사용해 다음과 같이 크기만 지정되어 있고 안에 데이터 값은 없는 배열을 생성해 놓을 수 있다.
int[] intArray = new int[7]; //7의 크기를 가지고 있는 배열 생성.
여기서 주의해야 할 점은 크기는 인덱스 순서와 같지 않다. 인덱스는 0부터 시작해서 6까지 총 7개의 데이터 값을 가지는 점을 참고했을 때 인덱스 마지막인 6이 아닌 총크기인 7을 대괄호[] 안에 넣어 주어야 한다.
이런 식으로 배열을 생성했을 경우 타입별로 배열의 초기값으로 데이터가 들어가게 된다.
분류 | 타입 | 초기값 |
기본 타입(정수) | byte[] char[] short[] int[] long[] |
0 '\u0000' 0 0 0L |
기본 타입(실수) | float[] double[] |
0.0F 0.0 |
기본 타입(논리) | boolean[] | false |
참조 타입 | 클래스[] | null |
인터페이스[] | null |
위 int타입으로 선언된 배열 안의 데이터 값을 아래와 같다.
int[] intArray = new int[7];
System.out.println(intArray[0]) //출력값: 0
System.out.println(intArray[1]) //출력값: 0
System.out.println(intArray[2]) //출력값: 0
.
.
.
다차원 배열
지금까지 봐온 배열은 전부 값 목록으로 구성된 1차원 배열이다.
이와 달리 행과 열로서 구성된 배열을 2차원 배열이라고 한다.
(그냥 배열안에 배열 들어있는게 2차원 배열 / 배열안에 배열안에 배열 있음 3차원 / 배열안에배열안에배열안에...xox)
//example code
int[][] scores = new int[2][3];
//scores == {{0,0,0}, {0,0,0}}
'📖혼자공부하는자바' 카테고리의 다른 글
Chapter 06-6-1 패키지와 접근 제한자 (0) | 2022.12.02 |
---|---|
Chapter 06-4-2 메소드 호출 (0) | 2022.11.29 |
Chapter 06-1 객체 (0) | 2022.11.22 |
Chapter 05-1 참조 타입과 참조 변수 (0) | 2022.11.21 |
Chapter 04-3 반복문, break문, continue문 (0) | 2022.11.21 |