본문 바로가기

자바/자바 개념

[Java] ArrayList, 학생 성적 예제 문제 / 2021.07.26

* 참고자료 : Do it! 자바 프로그래밍 입문


1. ArrayList란?
기본 배열은 프로그램에서 사용하려면 항상 배열 길이를 정하고 시작해야 한다.
그러나 처음에 정한 배열의 길이를 넘어서게 되는 경우에는 코드를 수정해야 한다. 혹은 중간에 배열을 삭제해야 된다면 배열의 중간을 비워 둘 수 없으므로 배열 요소의 위치를 변경해야 한다. 이 과정을 수행하려면 힘들고 복잡할 것이다.
그래서 자바에서는 배열을 조금 더 쉽게 사용할 수 있도록 ArrayList를 제공한다.

2. ArrayList 클래스의 주요 메서드
(1) boolean add(E e) : 요소 하나를 배열에 추가한다. E는 요소의 자료형을 의미한다.
(2) int size() : 배열에 추가된 요소 전체 개수를 반환한다.
(3) E get(int index) : 배열의 index위치에 있는 요소 값을 반환합니다.
(4) E remove(int index) : 배열의 index 위치에 있는 요소 값을 제거하고 그 값을 반환한다.
(5) boolean isEmpty() : 배열이 비어있는지 확인한다.

* ArrayList는 배열 길이와 상관없이 객체를 추가할 수 있으며, 중간의 어떤 요소 값이 제거되어도 그다음 요소 값을 하나씩 앞으로 이동한다.
ArrayList를 사용하기 위해서는 import java.util.ArrayList;를 반드시 추가해주어야 한다.

3. ArrayList를 활용한 학생 성적 예제 문제
이 프로그램은 Student 클래스와 Subject 클래스를 사용한다. 만약 어떤 학생이 10과목을 수강한다면 Subject 클래스형 자료형을 자료형으로 선언한 변수가 10개 필요할 것이다. 또 어떤 학생은 5과목을, 또 다른 학생은 3과목을 수강할 수도 있다.

문제 :
1001학번 Lee와 1002학번 Kim, 두 학생이 있습니다.
Lee학생은 2과목을 수강합니다. 국어 점수가 100점, 수학 점수가 50점입니다.
Kim학생은 3과목을 수강합니다. 국어 점수가 70점, 수학 점수가 85점, 영어 점수가 100점입니다.
Student 클래스와 Subject클래스를 생성한 후 두 학생의 과목 성적과 총점을 각각 출력해보자.

(1) Student클래스 구현하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package arraylist;
import java.util.ArrayList;
 
public class Student {
    int studentID;        // 학번
    String studentName;   // 이름
    ArrayList<Subject> subjectList; // ArrayList 선언하기
    
    // 매개변수로 학번과 이름을 받는 생성자
    public Student(int studentID, String studentName) {
        this.studentID = studentID;
        this.studentName = studentName;
        subjectList = new ArrayList<>();  // ArrayList 생성하기
    }
    // 학생이 수강하는 과목을 subjectList배열에 하나씩 추가하는 메서드
    public void addSubject(String name, int score) {
        Subject subject = new Subject(); // Subject 생성하기
        subject.setName(name);
        subject.setScorePoint(score);
        subjectList.add(subject); // add함수를 이용하여 추가
    }
    // 배열 요소 값 출력
    public void showStudentInfo() {
        int total = 0;
        for(Subject s : subjectList) {
            total += s.getScorePoint();
            System.out.println("학생 "+studentName+"의 "+s.getName()+" 과목 성적은 "+s.getScorePoint()+"입니다.");
        }
        System.out.println("학생 "+studentName+"의 총점은 "+total+" 입니다.");
    }
}
 
cs
 


(2) Subject클래스 구현하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package arraylist;
 
public class Subject {
    private String name; // 과목 이름
    private int scorePoint; // 과목 점수
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getScorePoint() {
        return scorePoint;
    }
    public void setScorePoint(int scorePoint) {
        this.scorePoint = scorePoint;
    }
    
    
}
 
cs


(3) StudentTest 클래스 구현하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package arraylist;
 
public class StudentTest {
    public static void main(String[] args) {
        Student studentLee = new Student(1001"Lee");
        studentLee.addSubject("국어"100);
        studentLee.addSubject("수학"50);
        
        Student studentKim = new Student(1002"Kim");
        studentKim.addSubject("국어"70);
        studentKim.addSubject("수학"85);
        studentKim.addSubject("영어"100);
        
        studentLee.showStudentInfo();
        System.out.println("================================");
        
        studentKim.showStudentInfo();
    }
}
 
cs


실행결과 :