알버트의 개발하는 블로그

자바 제11강 : ArrayList와 클래스 이용하여 학생들의 정보 출력하기 본문

프로그래밍 언어/Java

자바 제11강 : ArrayList와 클래스 이용하여 학생들의 정보 출력하기

알버트 2021. 9. 10. 09:17

 

이번 시간에는 ArrayList를 이용하여 입력된 학생들의 정보를 출력하는 것을 해보도록 하겠습니다.

이번 프로젝트를 위해서 필요한 클래스는 총 3가지입니다. 한 학생의 정보를 담기 위한 클래스인 ScoreVO, 그리고 학생들의 정보를 한꺼번에 담기 위한 ScoreList클래스, 그리고 마지막으로 ScoreTest(메인)클래스가 필요합니다.

저는 패키지를 만들고 그 안에서 클래스들을 선언해서 사용하였습니다.

 


ScoreVO (한 학생의 여러 정보를 담는 클래스)

package kr.koreait.scoreTest;

public class ScoreVO {	//한 학생의 정보를 담는 ScoreVO 클래스 생성

	//static으로 선언한 변수는 모든 객체에서 공유해서 사용해서 번호 메길 때 써준다.
	public static int count;	//ScoreVO 클래스 객체가 생성될때마다 자동으로 1씩 증가시킬 변수.
	private int no;		//번호
	private String name;	//이름
	private int java;	//자바점수
	private int jsp;	//jsp점수
	private int spring;	//spring점수
	private int total;	//총점
	private double average;		//평균
	private int rank = 1;	//석차, 석차를 기억할 기억장소의 초기치는 무조건 1로 한다.
	
	public ScoreVO() {	//기본 생성자
	}
	public ScoreVO(String name, int java, int jsp, int spring) {//초기화해주는 생성자
		no = ++count;	//자동으로 번호 생성
		this.name = name;
		this.java = java;
		this.jsp = jsp;
		this.spring = spring;
		total = java + jsp +spring;	//총점 합산
		average = total / 3.;}	//평균 구하기
	public int getNo() {	//	GETTER SETTER 함수
		return no;}
	public void setNo(int no) {
		this.no = no;}
	public String getName() {
		return name;}
	public void setName(String name) {
		this.name = name;}
	public int getJava() {
		return java;}
	public void setJava(int java) {
		this.java = java;}
	public int getJsp() {
		return jsp;}
	public void setJsp(int jsp) {
		this.jsp = jsp;}
	public int getSpring() {
		return spring;}
	public void setSpring(int spring) {
		this.spring = spring;}
	public int getTotal() {
		return total;}
	public void setTotal(int total) {
		this.total = total;}
	public double getAverage() {
		return average;}
	public void setAverage(double average) {
		this.average = average;}
	public int getRank() {
		return rank;}
	public void setRank(int rank) {
		this.rank = rank;}
	@Override
	public String toString() {		//한 학생의 정보를 리턴해주는 toString() 메소드
		return String.format("    %d %s  %3d  %3d     %3d   %3d %6.2f    %d",
				no ,name, java, jsp, spring, total, average, rank);
	}							//이런 형식으로 출력해준다.
}

 

이렇게 클래스를 구성하였습니다. GETTER SETTER은 마우스 우클릭으로 만들었고 생성자함수에서 인수를 처리할 수 있도록 저렇게 코딩해주었습니다. 마지막 toString()에서는 이 클래스의 리턴값과 리턴형식을 정해주었습니다.

 

 


ScoreList 클래스

package kr.koreait.scoreTest;

import java.util.ArrayList;

public class ScoreList {	//ArrayList담는 클래스 생성

	private ArrayList<ScoreVO> list = new ArrayList<ScoreVO>();
	//ScoreVO 객체를 담는 ArrayList 생성
	public ArrayList<ScoreVO> getList() {
		return list;}	//게터

	public void setList(ArrayList<ScoreVO> list) {
		this.list = list;} //세터

	@Override
	public String toString() {
		String str = "";	//문자열 str 초기화
		str += "==================================================\n";
		str += " 번호  이름  java  jsp  spring  총점  평균  석차\n";
		str += "==================================================\n";
		
//	석차를 계산한다. => 선택 정렬 방식으로 석차 계산
		for (int i = 0; i < list.size(); i++)
		{
			for (int j = i+1; j < list.size(); j++)
			{
				if ( list.get(i).getTotal() > list.get(j).getTotal())
				{
					list.get(j).setRank(list.get(j).getRank() + 1);
				}
				else {
					list.get(i).setRank(list.get(i).getRank() + 1);
				}
			}
		}
		for (ScoreVO vo : list)	//향상된 for문 
		{//자료형 변수명 : 배열명
			str += vo + "\n";
		}
		return str;
	}
	
//	성적을 ArrayList에 저장하는 메소드
	public void addScore(ScoreVO score) {
		list.add(score);	//add메소드로 score객체 저장
	}
}

 

ScoreVO 객체를 담는 ScoreList클래스는 이렇게 구성하였습니다. toString() 메소드는 문자열 str을 리턴하도록 코딩하였는데요. str을 "";로 초기화를 한 뒤에 학생들의 정보를 더해서 붙여주는 방식으로 코딩하였습니다.

향상된 for문은 for(자료형 변수명 : 배열명) 으로 사용할 수 있으며, 변수의 개수만큼 실행해주는 반복문입니다.

addScore 메소드는 list에 객체를 저장해주는 역할을 하는 메소드입니다.

 

 


ScoreTest 클래스

package kr.koreait.scoreTest;

public class ScoreTest {

	public static void main(String[] args) {	//메인 함수
		
		ScoreList scoreList = new ScoreList();	
		
		scoreList.addScore(new ScoreVO("홍길동", 72, 100, 99));
		scoreList.addScore(new ScoreVO("임꺽정", 12, 30, 99));
		scoreList.addScore(new ScoreVO("장길산", 70, 50, 99));
		scoreList.addScore(new ScoreVO("성춘향", 75, 80, 99));
		scoreList.addScore(new ScoreVO("이몽룡", 100, 100, 100));
		
		System.out.println(scoreList);

	}

}

 

메인 함수에서는 이렇게만 해주면 학생들의 정보를 넣고, 학생들의 정보를 출력해줄 수가 있습니다.

다른 클래스에서 만들어진 함수들을 사용하기 때문에 메인 클래스는 코딩이 아주 짧은 것을 확인할 수 있습니다.

한번 실행해보겠습니다.

 

 

 

이렇게 실행결과가 이쁘게 잘 나오는 것을 확인할 수 있습니다.

 

 

이렇게, 자바는 객체 지향 프로그래밍 언어입니다. 클래스를 얼마나 잘 다루고 객체들간의 관계를 이해하고 있는지가 굉장히 중요하겠습니다. 읽어주셔서 감사합니다.