[Java 객체지향] ArrayList 활용

2022. 1. 30. 10:42·Java & Kotlin
목차
  1. 문제
  2. 강사님 코드랑 다른점

문제

1001학번 Lee와 1002학번 Kim, 두 학생이 있습니다. Lee 학생은 국어와 수학 2과목을 수강했고, Kim 학생은 국어, 수학, 영어 3 과목을 수강하였습니다. Lee 학생은 국어 100점, 수학 50점입니다. Kim 학생은 국어 70점, 수학 85점, 영어 100점입니다. Student와 Subject 클래스를 만들고 ArrayList를 활용하여 두 학생의 과목 성적과 총점을 출력하세요

 

StudentTest.java

주어진 StudentTest 클래스를 봤을때, 구현해야할 것은 Student 클래스의 생성자, addSubject, showStudentInfo이다. 과목 ArrayList에 저장된 정보가 없을 때 출력되는 메세지를 확인하기 위해 studentPark 인스턴스를 추가로 생성했다.

package ch24;

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);
		
		Student studentPark = new Student(1003, "Park");	// 임의로 추가
		
		studentLee.showStudentInfo();
		System.out.println("======================================");
		studentKim.showStudentInfo();
		System.out.println("======================================");
		studentPark.showStudentInfo();
	}
}

 

수행 결과
학생 Lee의 국어과목 성적은 100입니다.
학생 Lee의 수학과목 성적은 50입니다.
학생 Lee의 점수 총 합은 150점 입니다.
======================================
학생 Kim의 국어과목 성적은 70입니다.
학생 Kim의 수학과목 성적은 85입니다.
학생 Kim의 영어과목 성적은 100입니다.
학생 Kim의 점수 총 합은 255점 입니다.
======================================
학생 Park의 과목 정보가 존재하지 않습니다.

 

Student.java

showStudentInfo() 메서드 만들 때 for문에서 subject.get(i)를 사용했는데 계속 주소값만 나왔다😂

subject.get(i)는 배열의 i번째 요소(객체)를 가져오는 것이고 객체를 출력하면 참조 변수가 가리키는 참조값이 나오는 것을 잊지 말자 getter와 setter의 필요성을 절실히 느끼며 Subject에 구현해주고 수정해주니 잘 나왔다!

package ch24;
import java.util.ArrayList;

public class Student {
	
	ArrayList<Subject> subject = new ArrayList<>();	// 과목과 점수를 저장할 배열 생성
	private int studentId;
	private String studentName;
	private boolean isValid;	// 배열에 정보가 있는지 여부를 판단하는 flag
	
	public Student(int studentId, String studentName) {
		this.studentId = studentId;
		this.studentName = studentName;
	}
	
	public void addSubject(String subName, int score) {	
		subject.add(new Subject(subName, score));
		isValid = true;	// subject에 add가 되면 flag를 true로 설정
	}
	
	public void showStudentInfo() {
		
		if(isValid) {
			int total = 0;	// 과목 총합을 구하기 위한 변수
			
			for( int i = 0 ; i < subject.size() ; i ++ ) {
				
					total += subject.get(i).getScore();
					System.out.println("학생 " + studentName + "의 " + subject.get(i).getSubName() + "과목 성적은 " + subject.get(i).getScore() + "입니다." );
			}
			
			System.out.println("학생 " + studentName + "의 점수 총 합은 " + total + "점 입니다.");
		}
		
		else {	// subject 배열에 정보 없을 시 출력 메세지
			System.out.println("학생 " + studentName + "의 과목 정보가 존재하지 않습니다.");
		}

	}
}

 

Subject.java
package ch24;

public class Subject {
	
	private String subName;
	private int score;
	
	public Subject(String subName, int score) {
		this.subName = subName;
		this.score = score;
	}

	public String getSubName() {
		return subName;
	}

	public void setSubName(String subName) {
		this.subName = subName;
	}

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
	}
	
}

 

강사님 코드랑 다른점

고냥 참고하기 위함

 

1. Student.class 에서 배열을 선언해주고 생성은 Student 생성자 내부에서 해주었다. Student 생성자에 넣어줌으로써 학생이 생성될 때마다 배열을 생성해줌

2. addSubject() 메서드에서 Subject 인스턴스를 만들어서 setter를 이용해 멤버 변수를 설정해주고 인스턴스를 ArrayList에 넣어주었다.

 

 

저작자표시 비영리 변경금지 (새창열림)

'Java & Kotlin' 카테고리의 다른 글

[Java 객체지향] 상속  (0) 2022.01.30
[Java 객체지향] ArrayList  (0) 2022.01.30
[Java 객체지향] 2차원 배열  (0) 2022.01.30
  1. 문제
  2. 강사님 코드랑 다른점
'Java & Kotlin' 카테고리의 다른 글
  • [Java 객체지향] 상속 활용 (멤버십 클래스 구현)
  • [Java 객체지향] 상속
  • [Java 객체지향] ArrayList
  • [Java 객체지향] 2차원 배열
Sue
Sue
개발 공부 로그
Sue's devlog개발 공부 로그
  • Sue
    Sue's devlog
    Sue
  • 전체
    오늘
    어제
    • 분류 전체보기 (122)
      • Algorithm (2)
      • WEB (8)
      • Java & Kotlin (83)
      • Spring (26)
      • Database (1)
      • Infra (0)
      • Git (1)
      • devlog (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Sue
[Java 객체지향] ArrayList 활용

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.