과목명 : 객체지향 프로그래밍(Object oriented programming)
수업일자 : 2022년 10월 05일 (수)
1. 배열(Array)의 선언과 생성
1-1. 배열(Array)의 정의
- 배열(Array)은 동일한 데이터 타입의 변수들로 이루어진 유한 집합으로 정의되며 컴퓨터 과학(Computer science)에서 배열은 공간의 순서를 나타내는 인덱스 번호를 가지고 연속적으로 나열된 데이터들로 이루어진 자료구조를 의미합니다.
1-2. 배열의 선언과 생성
(1) 배열의 선언
- 배열을 선언한다는 것은, 배열을 사용하기 위해 배열에 대한 참조변수(Reference variable)을 선언하는 것입니다.
- 참조변수를 선언하는 것이므로 실제로 배열에 대한 메모리 저장 공간이 생성되지 않습니다.
- 참조변수는 배열이 생성되어 만들어진 메모리 공간에 대한 시작 주소를 가지고 있습니다.
- 문법
- 데이터 타입[] 변수명;
- 데이터 타입 변수명[];
// 데이터 타입[] 변수명;
// 데이터 타입 변수명[];
int[] studentScore;
String studentName[];
(2) 배열의 생성, 인덱스 번호(Index number)
- 배열을 생성한다는 것은 위와 같이 배열을 사용하기 위한 참조변수를 생성하고 메모리에 배열을 위한 실제 공간을 생성하는 것을 말합니다.
- 문법
- 데이터 타입[] 변수명;
- 변수명 = new 데이터 타입[배열의 길이];
- 한 문장을 통해 배열의 선언과 생성이 모두 가능합니다.
- 데이터 타입[] 변수명 = new 데이터 타입[배열의 길이];
- 데이터 타입 변수명[] = new 데이터 타입[배열의 길이];
// 배열의 선언과 생성
int[] studentScore = new int[10];
- 배열은 연속된 공간으로 값이 저장되며, 연속된 공간마다 할당된 번호를 인덱스 번호(Index number)라고 합니다.
- 인덱스 번호는 0부터 시작하며, 배열의 길이보다 1이 더 작다는 특징을 가집니다.
- 위의 코드를 예시로 들어보면, int[] studentScore = new int[10];이라는 코드를 통해 길이가 10인 배열이 생성되었으며 총 10개의 공간이 있고 첫 번째 공간부터 0번 인덱스이므로, studentScore[0], studentScore[1], studentScore[2] ... studentScore[8], studentScore[9]까지 총 10개의 공간이 존재합니다.
1-3. 배열의 초기화(Initialization)
- 배열의 초기화는, 생성된 배열에 처음으로 데이터를 할당하는 것을 의미합니다.
- 배열을 초기화할 수 있는 2가지 구문이 존재합니다.
(1) 데이터 타입[] 변수명 = new 데이터 타입[]{데이터 1, 데이터 2, 데이터 3, ... 데이터 n};
int[] studentScore = new int[]{100, 90, 80, 70, 60};
(2) 데이터 타입[] 변수명 = {데이터 1, 데이터 2, 데이터 3, ... 데이터 n};
int[] studentScore = {100, 90, 80, 70, 60};
- 반복문을 이용해 데이터를 저장할 수도 있으며 아래 코드는 직접 반복문을 이용한 예시입니다.
public class ArrayTest1 {
public static void main(String[] args) {
// 배열에 데이터 할당
int[] studentScore = new int[5];
// 배열에 저장할 데이터
int score = 100;
for (int index = 0; index <= studentScore.length - 1; index++) {
// 인덱스에 순서대로 값을 할당한다.
studentScore[index] = score;
// 다음에 저장할 값부터 10씩 감소시킨다.
score -= 10;
System.out.println(studentScore[index]);
}
}
}
/* 실행 결과
100
90
80
70
60
*/
2. 다차원 배열(Multi-Dimensional Array)
2-1. 정의
- 다차원 배열이란, 2차원 이상의 배열을 의미하며 배열의 요소(데이터)로 또 다른 요소를 가지는 배열을 의미합니다.
2-2. 2차원 배열(Two dimensional array)
- 2차원 배열은 배열의 요소(데이터)로 1차원 배열을 가지는 배열을 의미합니다.
- 주로 테이블 형태의 데이터를 저장하기 위해 2차원 배열을 사용합니다.
2-3. 2차원 배열의 선언
- 2차원 배열은 행과 열로 구분되며 선언과 생성은 1차원 배열 방식과 동일합니다.
- 문법
- 데이터 타입[][] 변수명;
- 데이터 타입 변수명[][];
// 2차원 배열의 선언
int[][] subjectScore;
int subjectScore[][];
2-4. 2차원 배열의 생성
- 1차원 배열의 초기화 방식과 동일합니다.
- 문법
- 데이터 타입[][] 변수명;
- 변수명 = new 데이터 타입[행의 길이][열의 길이];
- 한 문장을 통해 2차원 배열의 선언과 생성이 모두 가능합니다.
- 데이터 타입[][] 변수명 = new 데이터 타입[행의 길이][열의 길이];
// 5행 3열의 2차원 배열 생성
int[][] subjectScore = new int[5][3]
2-5. 2차원 배열의 초기화(Initialization)
- 1차원 배열과 동일하게 생성된 2차원 배열에 데이터를 할당하는 것을 의미합니다.
- 아래 코드는 반복문을 통해 각 테이블을 순회하며 데이터를 저장하는 코드를 작성했습니다.
public class MultipleArray {
public static void main(String[] args) {
// 2행 3열의 2차원 배열 생성
int[][] studentScore = new int[2][3];
// 반복문으로 각 테이블에 데이터 저장
for (int number1 = 0; number1 < studentScore.length; number1++) {
// 저장할 데이터
int score = 100;
for (int number2 = 0; number2 < studentScore[number1].length; number2++) {
studentScore[number1][number2] = score;
System.out.printf("studentScore[%d][%d] = %d%n", number1, number2, score);
score -= 10;
}
}
}
}
/* 실행 결과
studentScore[0][0] = 100
studentScore[0][1] = 90
studentScore[0][2] = 80
studentScore[1][0] = 100
studentScore[1][1] = 90
studentScore[1][2] = 80
*/
3. 사용자로부터 입력받기 - 커맨드 라인(Command Line)
- 사용자가 커맨드 라인에 입력한 값이 문자열 배열에 담겨서 전달됩니다.
- 사용자가 커맨드 라인에 입력한 값을 프로그램에서 사용할 수 있게 됩니다.
- 배열에 담기므로 배열의 인덱스로 접근해서 각 값에 접근할 수 있습니다.
- 사용자로부터 매개변수를 문자열의 배열로 받아서 출력할 수 있는 코드의 형태입니다.
public class CommandLines {
public static void main(String[] args) {
System.out.printf("매개변수의 개수 : %d%n", args.length);
for (int index = 0; index < args.length; index++) {
System.out.printf("args[%d] = %s%n", index, args[index]);
}
}
}
/* 실행 결과
매개변수의 개수 : 0
*/
- Windows 운영체제 기준으로 cmd를 열고 아래와 같이 위의 소스코드가 바이너리 코드로 컴파일된 클래스 파일이 위치하는 디렉토리로 이동합니다.
- java CommandLines 뒤에 문자열을 입력하여 매개변수로 문자열 데이터를 넘겨주고 프로그램 실행 시 넘겨준 문자열 배열이 인덱스 순서대로 출력되는지 확인합니다.
4. 실습 내용
4-1. 다차원 배열을 이용하여 학생의 성적 평균을 계산하는 프로그램
public class StudentScore {
public static void main(String[] args) {
// 학생의 국어, 영어, 수학, 점수 배열
int[][] score = { {100, 90, 80}, {90, 80, 70}, {70, 80, 70}, {90, 90, 90}};
// 각 과목별 평균
float koreaAvg, englishAvg, mathAvg;
// 각 과목별 총점
int koreaSum = 0, englishSum = 0, mathSum = 0;
System.out.println("번호 국어 영어 수학 총점 평균");
System.out.println("=========================================");
for (int i = 0; i < score.length; i++) {
// 개인별 모든 과목 총점
int sum = 0;
// 개인별 전체 과목 평균
float allAvg = 0f;
// 각 과목별 총점 계산
koreaSum += score[i][0];
englishSum += score[i][1];
mathSum += score[i][2];
// 번호 출력
System.out.printf("%3d", i + 1);
for (int j = 0; j < score[i].length; j++) {
// 개인별 전체 과목 총점
sum += score[i][j];
System.out.printf("%5d", score[i][j]);
}
// 개인별 전체 과목 평균
allAvg = sum / (float) score[i].length;
System.out.printf("%5d %5.1f%n", sum, allAvg);
}
System.out.println("=========================================");
System.out.printf("총점 : %4d %4d %d%n", koreaSum, englishSum, mathSum);
koreaAvg = (float) koreaSum / score.length;
englishAvg = (float) englishSum / score.length;
mathAvg = (float) mathSum / score.length;
System.out.printf("평균 : %5.1f%5.1f%5.1f%n", koreaAvg, englishAvg, mathAvg);
}
}
<실행 결과>
- 학부에서 수강했던 전공 수업 내용을 정리하는 포스팅입니다.
- 내용 중에서 오타 또는 잘못된 내용이 있을 시 지적해 주시기 바랍니다.
'전공 수업 > 객체 지향 프로그래밍(Java)' 카테고리의 다른 글
[9주 차] - 메서드의 개념, 클래스와 객체 (0) | 2022.11.04 |
---|---|
[7주 차] - Math.random() 메서드, 제어문(반복문, 조건문)을 사용한 코드 예제 (0) | 2022.10.12 |
[5주 차] - 조건문(if, if-else, else-if, switch 문), 난수를 생성하는 Math.random() 메서드 (0) | 2022.09.29 |
[4주 차] - 연산자(Operator)와 반복문(for, while, do-while) (2) | 2022.09.26 |
[3주 차] - 변수(Variable)와 상수(Constant), 문자와 문자열(String) (0) | 2022.09.21 |
댓글