배열(Array)
- 자바는 같은 타입의 많은 데이터를 다루는 효율적인 방법인 배열을 제공
- 배열은 같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스(index)를 부여해 데이터를 읽거나, 데이터를 저장하는 방법을 제공
- 변수와 마찬가지로 배열을 사용하기 위해서는 배열 변수를 선언
- 배열 변수를 선언하는 구문은 자료형[] 변수명 또는 자료형 변수명[]
// 대괄호([])는 배열 변수를 선언할 때 사용하는 기호이다.
int[] iArray;
double dArray[];
3. 배열 생성 및 초기화
- 배열에 저장될 값을 배열 생성 후 저장하려면 new 연산자로 배열을 생성
- new 연산자로 배열을 생성하는 구문은 new 자료형[배열 크기]
int[] iArray;
double dArray[] = new double[5]; // 배열 변수 선언과 동시에 배열 생성
iArray = new int[5]; // 배열 변수 선언 후 배열 생성
- 배열이 생성되고 나서 배열에 저장되어 있는 값을 읽거나 저장, 변경하기 위해서는 배열 변수명과 인덱스를 사용
// 배열의 인덱스는 0번부터 시작한다. (Zero Base)
iArray[0] = 10;
iArray[1] = 20;
iArray[2] = 30;
iArray[3] = 40;
iArray[4] = 50;
// iArray[5] = 60; // ArrayIndexOutOfBoundsException
System.out.println(iArray[0]); // 10 출력
System.out.println(iArray[1]); // 20 출력
System.out.println(iArray[2]); // 30 출력
System.out.println(iArray[3]); // 40 출력
System.out.println(iArray[4]); // 50 출력
// System.out.println(iArray[5]); // ArrayIndexOutOfBoundsException
- 배열 사용 시 반복문을 활용하여 편리하게 사용이 가능
// 배열변수.length 필드로 배열의 길이를 얻을 수 있다.
for(int i = 0; i < dArray.length; i++) {
iArray[i] = (i + 1) * 10;
System.out.println(iArray[i]);
}
3.2. 값 목록으로 배열 생성 및 초기화
- 배열에 저장될 값을 배열 생성과 동시에 초기화하려면 값 목록으로 배열을 생성
- 값 목록으로 배열을 생성하는 구문은 new 자료형[] {값, 값, 값, ... } 또는 {값, 값, 값, ... }
int[] iArray = new int[] {1, 2, 3, 4, 5}; // 배열 생성과 동시에 초기화
double dArray[] = {1.1, 2.2, 3.3, 4.4, 5.5}; // 배열 생성과 동시에 초기화
- 배열 변수를 이미 선언한 후에 중괄호를 사용한 배열 생성은 불가능
int[] iArray;
iArray = {1, 2, 3, 4, 5}; // 에러 발생
- 배열 변수를 미리 선언한 후에 중괄호를 사용한 배열 생성은 new 연산자를 사용해서 값 목록을 지정
int[] iArray;
iArray = new int[] {1, 2, 3, 4, 5};
4. 배열의 저장 구조
- 배열 변수는 참조 변수, 배열 변수는 Stack 영역에 생성
- new 자료형[배열 크기] 구문을 실행하면 Heap 영역에 배열을 생성하고, 배열의 시작 주소를 반환.
- new 자료형[] {값, 값, 값, ... } 또는 {값, 값, 값, ... } 구문을 실행하면 주어진 값들을 요소로 가지는 배열을 Heap 영역에 생성하고, 배열의 시작 주소를 반환
- new 자료형[배열 크기] 구문으로 배열을 생성할 경우 배열은 자동적으로 기본값으로 초기화
- null(널)은 참조형 변수가 Heap 영역의 객체를 참조하지 않는다고 뜻하는 값
- null 값을 가지고 있는 참조 변수를 사용하면 NullPointerException이 발생
더보기
- 참조변수 : 주소값을 저장하는 변수
2차원 배열
- 배열의 요소로 다른 배열을 가지는 배열
- 2차원 배열은 논리적으로 행과 열로 이루어진 표 형태로 존재한다고 생각
- 2차원 배열은 할당된 공간마다 인덱스 번호 두 개를 갖음 (앞 번호는 행, 뒤 번호는 열)
2. 2차원 배열 변수 선언
- 2차원 배열 변수를 선언하는 구문은 자료형[][] 변수명 또는 자료형 변수명[][]
int[][] iArray;
double dArray[][];
byte[] bArray[]; // 배열 변수 선언 가능
3. 2차원 배열의 생성 및 초기화
- new 연산자로 2차원 배열을 생성하는 구문은 new 자료형[행 크기][열 크기]
int[][] iArray; double dArray[][] = new double[4][4]; iArray = new int[4][4];
- 2차원 배열이 생성되고 나서 배열을 사용하기 위해서는 변수명과 두 개의 인덱스(행과 열)를 사용
iArray[0][0] = 10;
iArray[0][1] = 20;
iArray[0][2] = 30;
iArray[0][3] = 40;
...
System.out.println(iArray[0][0]); // 10 출력
System.out.println(iArray[0][1]); // 20 출력
System.out.println(iArray[0][2]); // 30 출력
System.out.println(iArray[0][3]); // 40 출력
- 2차원 배열 사용 시 중첩 반복문을 활용하여 편리하게 사용이 가능
for(int i = 0; i < iArray.length; i++) {
for(int j = 0; j < iArray[i].length; j++) {
iArray[i][j] = (j + 1) * 10;
System.out.println(iArray[i][j]);
}
}
- 값 목록으로 2차원 배열을 생성하는 구문은 new 자료형[][] {{값, 값, ... }, {값, 값, ... }} 또는 {{값, 값, ... }, {값, 값, ... }}
int[][] iArray = new int[][] {{1, 2, 3, 4}, {5, 6, 7, 8}};
double dArray[][] = {{1.1, 2.2, 3.3, 4.4}, {5.5, 6.6, 7.7, 8.8}};
- 위 예시의 iArray의 구조는 아래와 같다.
열거 타입(Enumeration Type)
- 데이터 중에는 몇 가지로 한정된 값만 갖는 데이터가 존재
- 한정된 값만을 갖는 데이터 타입
- 열거 타입은 몇 개의 열거 상수(Enumeration Constant) 중에서 하나의 상수를 저장하는 데이터 타입
- 열거 타입은 클래스와 동일하게 소스 파일(.java)을 생성
- 열거 상수는 모두 대문자로 작성하는 것이 관례
// public enum은 열거 타입을 선언하기 위한 키워드이다.
// 열거 타입의 이름은 소스 파일명과 동일해야 한다.
public enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
- 열거 타입도 하나의 데이터 타입이므로 변수를 선언하고 사용
Week today;
- 선언된 열거 타입 변수에 열거 상수를 저장할 수 있음
- 열거 상수는 단독으로 사용할 수 없고 반드시 열거 타입.열거 상수로 사용
Week today = Week.FRIDAY;
- name() 메소드는 열거 상수가 가지고 있는 문자열을 반환
- ordinal() 메소드는 전체 열거 상수 중 몇 번째 열거 상수인지 정숫값을 반환 (0부터 시작)
- equals() 메소드는 매개값으로 전달되는 열거 상수와 동일한 열거 상수인지 확인 후 true 또는 false를 반환
- compareTo() 메소드는 매개값으로 주어진 열거 상수를 기준으로 전후로 몇 번째 위치하는 정숫값을 반환
System.out.println(today.name());
System.out.println(today.ordinal());
System.out.println(today.equals(Week.SUNDAY));
System.out.println(today.compareTo(Week.SUNDAY));
- 열거 타입의 열거 상수에 다른 속성을 추가할 수 있다.
- 열거 상수의 괄호()를 넣고 추가로 할 속성을 적어준다.
- 열거 타입에 필드를 설정하고 Getter를 통해 읽어 올 수 있다.
public enum Week {
MONDAY("monday", 1),
TUESDAY("tuesday", 2),
WEDNESDAY("wednesday", 3),
THURSDAY("thursday", 4),
FRIDAY("friday", 5),
SATURDAY("saturday", 6),
SUNDAY("sunday", 7);
private final String name;
private final int value;
// 열거 타입의 생성자는 반드시 private으로 선언해야 한다.
private Week(String name, int value) {
this.name = name;
this.value = value;
}
// 열거 타입의 name 값을 읽어오는 메소드이다.
public String getName() {
return this.name;
}
// 열거 타입의 value 값을 읽어오는 메소드이다.
public int getValue() {
return this.value;
}
}
'JAVA' 카테고리의 다른 글
[JAVA] 클래스(Class) / 필드(Field) / 생성자(Constructor) / 메소드(Method) (0) | 2024.06.10 |
---|---|
[JAVA] 제어문 (1) | 2024.06.07 |
[JAVA] 변수(Variable) / 자료형 / 연산자(Operator) (1) | 2024.06.04 |
[JAVA] JAVA (0) | 2024.06.04 |
[JAVA] 자바 개발 환경 구축 (0) | 2024.06.04 |