◎ 다차원 배열
- 2차원 배열 이상의 배열 (수학의 행렬과 같은 자료 구조)
- 자바는 1차원 배열을 이용해 2차원 배열 구현
◎ 2차원 배열 선언
- 2차원 배열 선언
int[][] intArray;
char[][] charArray;
float[][] floatArray;
- 2차원 배열 생성
int intArray[] = new int[2][5];
char charArray[] = new char[5][5];
float floatArray[] = new float[5][2];
- 2차원 배열 선언, 생성, 초기화
int intArray[][] = {{0,1,2}, {3,4,5}, {6,7,8}};
char charArray[][] = {{'a','b','c'}, {'d','e','f'}};
float
◎ 2차원 배열의 length 필드
- i.length -> 2차원 배열의 행의 개수로서 2
- i[n].length는 n번째 행의 열의 개수
- - i[0].length -> 0번째 행의 열의 개수로서 5
- - i[1].length -> 1번째 행의 열의 개수로서 역시 5
∴ 2차원 배열 예제 : 3년간 매출 총액과 평균 구하기
package p1.main;
public class Main {
public static void main(String[] args) {
int intArray[][] = {{90,90,110,110},
{120,110,100,110},
{120,140,130,150}};
double sum = 0;
for(int i = 0; i<intArray.length; i++)
for(int j = 0; j<intArray[i].length; j++)
sum += intArray[i][j];
System.out.println("지난 3년간 매출 총액은 " + sum + "이며 연평균 매출은 " +sum/intArray.length + "입니다.");
}
}
◎ 정방형과 비정방형 배열
- 정방형 배열 : 각 행의 열의 개수가 같은 배열
- 비정방형 배열 : 각 행의 열의 개수가 다른 배열
◎ 비정방형 배열의 length 필드
i.length // 2차원 배열의 행의 개수로서 4
i[n].length // n번째 행의 열의 개수
i[0].length // 0번째 행의 열의 개수로서 1
i[1].length // 1번째 행의 열의 개수로서 2
i[2].length // 2번째 행의 열의 개수로서 3
i[3].length // 3번째 행의 열의 개수로서 4
∴ 비정방형 배열 예제
package p1.main;
public class Main {
public static void main(String[] args) {
int intArray[][] = new int[4][];
intArray[0] = new int[3];
intArray[1] = new int[2];
intArray[2] = new int[3];
intArray[3] = new int[2];
for (int i=0; i<intArray.length; i++)
for (int j=0; j<intArray[i].length; j++)
intArray[i][j] = (i+1)*10 + j;
for (int i=0; i<intArray.length; i++) {
for (int j=0; j<intArray[i].length; j++)
System.out.print(intArray[i][j] + " ");
System.out.println();
}
}
}
◎ 메소드의 배열 리턴
- 배열의 참조주소만 리턴 (참조주소 : heap 메모리에 존재)
- 메소드이 리턴 기입
- => 메소드가 리턴하는 배열의 타입은 리턴 받는 배열 타입과 일치
- => 리턴 타입에 배열 크기를 지정하지 않음
∴ 메소드 배열 리턴 예제
package p1.main;
public class Main {
static int[] makeArray() {
int temp[] = new int[4];
for (int i=0; i<temp.length; i++)
temp[i] = i;
return temp;
}
public static void main(String[] args) {
int intArray [];
intArray = makeArray();
for (int i=0; i<intArray.length; i++)
System.out.println(intArray[i]);
}
}
◎ main() 메소드
- main()은 자바 응용프로그램의 실행 시작 메소드
- main()의 원형
- - 반드시 static
- - 반드시 public
- - 반드시 void
- - 반드시 매개 변수 타입은 문자열 배열
◎ 커맨드 라인 입력
- 배열의 선언과 사용
◎ main(string [] args) 메소드의 인자 전달
◎ 이클립스에서 main() 메소드의 인자전달
∴ main()의 인자 이용 예제
∴ main()의 인자 이용 예제 : 여러 개의 실수 값을 입력받아 평균값 계산하기
◎ 객체를 참조하는 배열
- 기본 타입 (byte, char, short, int, long, float, double, boolean) 배열
- - 각 항목에 직접 값을 가지고 있음
- 참조 타입(클래스, 인터페이스) 배열 - 각 항목에 객체의 번지 가짐
◎ 배열 복사
- 배열은 한 번 생성하면 크기 변경 불가
- 더 많은 저장 공간이 필요하다면 보다 큰 배열을 새로 만들고 이전 배열로부터 항목 값들을 복사
◎ 배열 복사 방법
- for 문 이용
- System.arrayCopy() 메소드 이용
- Arrays 클래스 이용
◎ 향상된 for 문
- 배열 및 컬렉션의 항목 요소를 순차저긍로 처리
- 인덱스 이용하지 않고 바로 항목 요소 반복
int[] scores = {95, 71, 84, 93, 87};
int sum = 0;
for (int score : scores) {
sum = sum + score;
}
∴ 배열과 향상된 for 문 (for - each 문) 연계 활용
package p1.main;
public class Main {
public static void main(String[] args) {
int[] num = {1,2,3,4,5};
int sum = 0;
for (int k : num) { // 반복될 때마다 k는 num[0], num[1], ..., num[4] 값으로 설정
sum += k;
}
System.out.println("합은 " + sum);
}
}
package p1.main;
public class Main {
public static void main(String[] args) {
String names[] = {"사과","배","바나나","체리","딸기","포도"};
for (String s : names) { // 반복할 때마다 s는 names[0], names[1], ..., names[5]로 설정
System.out.print(s + " ");
}
}
}
package p1.main;
public class Main {
public static void main(String[] args) {
enum Week {월,화,수,목,금,토,일};
for (Week day : Week.values()) { // 반복될 때마다 day는 월,화,수,목,금,토,일로 설정
System.out.print(day + "요일 ");
}
}
}
◎ 열거 타입 (Enumeration Type)
- 한정된 값만을 갖는 데이터 타입
- 한정된 값은 열거 상수(Enumeration Constant)로 정의
◎ 열거 타입 선언
- 파일 이름과 동일한 이름으로 다음과 같이 선언한다. (첫 글자는 대문자)
public enum 열거타입이름 {...}
- 한정된 값인 열거 상수 정의
- - 열거 상수 이름은 관례적으로 모두 대문자로 작성
- - 다른 단어가 결합된 이름일 경우 관례적으로 밑줄(_)로 연결
public enum Week { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, ...}
public enum LoginResult { LOGIN_SUCCESS, LOGIN_FAILED}
public enum Week { // Week가 열거 타입 이름
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
} // 위에 있는 요일들이 열거 상수이다.
◎ 열거 타입 변수
- 열거 타입 변수 선언
열거타입 변수;
Week today;
Week reservationDay;
- 열거 상수 값 저장 - 열거 타입 변수값은 열거 상수 중 하나
열거타입 변수 = 열거타입.열거상수;
Week today = Week.SUNDAY;
- 열거 타입 변수는 참조 타입
- - 열거 타입 변수는 참조 타입이므로 null 값 저장 가능
Week birthday = null;
◎ 열거 객체의 메소드
- 열거 객체는 열거 상수의 문자열을 내부 데이터로 가지고 있음
- 열거 타입은 컴파일 시 java.lang.Enum 클래스를 자동 상속
- - 열거 객체는 java.lang.Enum 클래스의 메소드 사용 가능
리턴타입 | 메소드(매개변수) | 설명 |
String | name() | 열거 객체의 문자열을 리턴 |
int | ordinal() | 열거 객체의 순번(0부터 시작)을 리턴 |
int | compareTo() | 열거 객체를 비교해서 순번 차이를 리턴 |
열거타입 | valueOf(String name) | 주어진 문자열의 열거 객체를 리턴 |
열거배열 | values() | 모든 열거 객체들을 배열로 리턴 |
이번 참조 타입은 제가 생각한 것보다 양이 많아서 3편으로 나누게 되었습니다. 다음 시간에는 이 참조 타입 배운 내용 String부터 실습을 해보는 시간을 가져보도록 하겠습니다. 감사합니다.^^
반응형