모든지 기록하자!

[Java] Array List 클래스 본문

Java

[Java] Array List 클래스

홍크 2021. 5. 14. 20:11
728x90

기존 배열은 길이를 정해서 선언하기 때문에 사용 중에 부족한 경우

다른 배열로 복사하는 코드를 직접 구현해야 한다.

중간의 요소가 삭제되거나 삽입되는 경우도 나머지 요소에 대한 조정하는 코드를 구현해야 한다.

ArrayList 클래스는 자바에서 제공되는 객체 배열이 구현된 클래스이며

여러 메서드와 속성을 사용하여 객체 배열을 편리하게 관리할 수 있다.

가장 사용이 많은 객체 배열 클래스이다.

 

ArrayList 클래스의 주요 메서드

boolean add(E e)   -   요소 하나를 배열에 추가한다. E는 요소의 자료형을 의미

int size()              -   배열에 추가된 요소 전체 개수를 반환한다.

E get(int index)     -   배열의 index 위치에 있는 요소 값을 반환한다.

E remove(int index)  -  배열의 index 위치에 있는 요소 값을 제거하고 그 값을 반환한다.

boolean isEmpty()   -  배열이 비어 있는지 확인한다.

 

    

ArrayList 클래스 활용

ArrayList<E> 배열 이름 = new ArrayList<E>();

배열을 선언하는 부분의 <> 안에 사용할 객체의 자료형 <E>를 쓴다.

<E>와 같은 형태를 제네릭(genefic) 자료형이라고 한다.

 

 

import java.util.ArrayList;

내 코드에 없는 클래스를 가져와 사용할 때 이 클래스가 어디에 구현되어 있다고

알려주기 위해 코드 맨 위에 선언하는 것을 임포트(import)라고 한다.

ArrayList를 사용하기 위해서는 반드시 import를 해야 한다. 

 

 

기본적인 ArrayList의 형식을 살펴보자

package arraylist;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {

		ArrayList<String> list = new ArrayList<String>();
		list.add("aaa"); //list에 add를 사용하여 aaa를 추가한다.
		list.add("bbb");
		list.add("bbb");
		
		for (int i = 0; i < list.size(); i++) { // list.length가 아닌 .size()를 사용한다.
			System.out.println(list.get(i)); // list의 i번째 를 출력
		}
		
		System.out.println("===향상된 for문 사용===");
		for(String s : list) { // 기존 for문 보다 간결하게 사용 가능하다.
			System.out.println(s);
		}
	}

}

 

 

 

ArrayList를 사용해 간단한 학생 성적 출력 프로그램을 구현해보자

어떤 학생이 10과목을 수강한다면 Subject 클래스형을 자료형으로 선언한 변수 10개가 필요할 것이다.

또 어떤 학생은 3과목을 수강할 수도 5과목을 수강할 수도 있다.

따라서 이러한 경우에는 배열을 사용하여 프로그램을 구현하는 것이 좋다.

 

 

1001학번 Lee와 1002학번 Kim 두 학생이 있다. Lee 학생은 2과목을 수강한다. 국어 점수가 100점,

수학 점수가 50점이다. Kim 학생은 3과목을 수강한다. 국어 점수가 70점, 수학 점수가 85점, 

영어 점수가 100점이다. Student 클래스와 Subject 클래스를 생성한 후 두 학생을 과목 성적과  총점을 각각 출력해보자

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;
	}
	
	
}

접근 지정자를 private로 만들었기 때문에 getter와 setter를 만들어준다.

 

 

Student 클래스 구현

import java.util.ArrayList;

public class Student {

	private int studentID;       // Student 클래스의 멤버 변수들
	private String studentName;
	private ArrayList<Subject> subjectList;
	
	public Student(int studentID, String studentName) { //생성자
		this.studentID = studentID;
		this.studentName = studentName;
		
		subjectList = new ArrayList<Subject>(); // ArrayList 생성
	}
	
	public void addSubject(String name, int score) {
		
		Subject subject = new Subject(); // Subject 생성
		subject.setName(name); // 과목 이름 추가
		subject.setScorePoint(score); // 점수 추가
		 
		subjectList.add(subject); // 배열에 저장하기
	}
	
	public void showStudentInfo() { // 학생 정보 출력
		
		int total = 0;
		float avg = 0;
		for(Subject subject : subjectList) {
			total += subject.getScorePoint(); // 총점 더하기
			System.out.println("학생 " + studentName + "님의 " + subject.getName()+" 
           						 과목의 성적은"+ subject.getScorePoint() + "점 입니다.");
		}
		avg = total/subjectList.size(); // 총점 나누기 과목의 갯수로 평균 구하기
		System.out.println("학생 " + studentName + "님의 총점은 " + total + "점 입니다.");
		System.out.println("학생 " + studentName + "님의 평균은 " + avg + "점 입니다.");
	}
}

 

 

 

학생 두 명을 생성하고 각 학생의 과목별 성적과 총점 출력하기

 

public class StudentTest {

	public static void main(String[] args) {

		Student studentLee = new Student(100, "Lee");
		studentLee.addSubject("국어", 100);
		studentLee.addSubject("수학", 90);
		
		studentLee.showStudentInfo();
		
		System.out.println("=================");
		Student studentKim = new Student(100, "Kim");
		studentKim.addSubject("국어", 100);
		studentKim.addSubject("수학", 90);
		studentKim.addSubject("영어", 80);
		
		studentKim.showStudentInfo();
	}

}

 

출력 결과

 

 

 

 

728x90
Comments