학습목표
.을 이용해 연결구조를 알아보자
package ch06;
public class Course {
private int courseId;
private String name;
private String description;
public Course(int courseId, String name, String description) {
this.courseId = courseId;
this.name = name;
this.description = description;
}
public int getCourseId() {
return courseId;
}
public void setCourseId(int courseId) {
this.courseId = courseId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
package ch06;
public class Enrollment {
//등록 기록
//홍길동 학생은 수학 1을 등록한다 (등록기록1)
//이순신 학생은 화학1을 등록한다 (등록기록2)
private int enrollmentId;
private Student student;
private Course course;
// 데이터 베이스는 영구적으로 보관하고 싶을때 쓴다.
// 데이터베이스에 저장되면 어떻게 저장되는지 생각해보면 좋다.
public Enrollment(int enrollmentId, Student student, Course course) {
this.enrollmentId = enrollmentId;
this.student = student;
this.course = course;
}
public int getEnrollmentId() {
return enrollmentId;
}
public void setEnrollmentId(int enrollmentId) {
this.enrollmentId = enrollmentId;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
}
}
package ch06;
import java.util.ArrayList;
import java.util.List;
public class Student {
private int studentId;
private String name;
private String email;
// tip - 자료구조 배열은 가능한 멤버 변수 선언과 동시에 초기화 해보자.
private List<Enrollment> enrollments = new ArrayList<>();
public Student(int studentId, String name, String eamil) {
this.studentId = studentId;
this.name = name;
this.email = eamil;
}
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public List<Enrollment> getEnrollments() {
return enrollments;
}
public void setEnrollments(List<Enrollment> enrollments) {
this.enrollments = enrollments;
}
//등록 기능 추가
public void addEnrollment(Enrollment enrollment) {
enrollments.add(enrollment);
}
}
package ch06;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
//학생 생성
Student student1 = new Student(1,"Alice","alice@example.com" );
Student student2 = new Student(1,"Bob","bob@example.com" );
//과정 생성
Course course1 = new Course(1, "수학", "introduction to Mathematics");
Course course2 = new Course(1, "영어", "introduction to English");
// 1번 학생이 Math 과정을 등록한다
Enrollment enrollment1 = new Enrollment(1, student1, course1);
Enrollment enrollment2 = new Enrollment(2, student2, course2);
Enrollment enrollment3 = new Enrollment(1, student1, course2);
// 학생의 데이터에 내가 등록한 정보를 저장시킬수 있다.
// ArrayList<Enrollment> list = new ArrayList<>();
// list.add(enrollment1);
// student1.setEnrollments(enrollment1);
// 통으로 List 를 저장하는 녀석
student1.addEnrollment(enrollment1); // 0 번째 인덱스
student1.addEnrollment(enrollment3); // 1번째 자료구조 저장
student2.addEnrollment(enrollment2); // 2번째 밥 등록신청 정보 저장
//문제1
// 밥이 신청한 과정에 이름을 화면에 출력하시오.
//문제 해결 방안 - 요청 사항 : 학생으로 접근
//ArrayList<Enrollments> a;
//a.curse
System.out.println(student2.getEnrollments().get(0).getCourse().getName());
//student2.getEnrollments().get(0).getCourse().getName(); //enrollment2
//문제2
//엘리스가 신청한 과정에 이름을 화면에 출력하시오.
//문제 해결 방안 - 요청 사항 : 학생으로 접근
//점을 연관해서 생각하자 (계속 안에 들어간다)
System.out.println("-----------------------");
for (int i = 0; i < student1.getEnrollments().size(); i++) {
String studentName = student1.getName();
Course course = student1.getEnrollments().get(i).getCourse();
String courseName = course.getName();
System.out.println(studentName + ",courseName : " + courseName);
}
//위 코드는 학생과 과목을 Enrollment 클래스를 통해서 연결하는 예제 코드이다.
//문제3
//Enrollment 1 학생 정보와 과목 정보를 반복문을 통해서 출력해주세요.
//학생이름 : 이름
// 수강 과목 : 과목이름
// --------------------
System.out.println("---------------------");
System.out.println("학생이름 : " + enrollment1.getStudent().getName());
System.out.println("수강과목 이름 : " + enrollment1.getCourse().getName());
System.out.println("------------------");
//문제 4
//ArrayList 를 생성해서 Enrollment 저장해주세요.
ArrayList<Enrollment> items = new ArrayList<>();
items.add(enrollment1);
items.add(enrollment2);
items.add(enrollment3);
for (Enrollment e : items) {
System.out.println(e.getStudent().getName());
System.out.println(e.getCourse().getName());
System.out.println("---------------");
}
// foreach Alice에 수강하고 있는 과목 이름을 다시 한번더 출력 하시오.
for (Enrollment e : student1.getEnrollments()) {
System.out.println(enrollment1.getCourse().getName());
}
} //end of main
} //end of class
출력값
영어
-----------------------
Alice,courseName : 수학
Alice,courseName : 영어
---------------------
학생이름 : Alice
수강과목 이름 : 수학
------------------
Alice
수학
---------------
Bob
영어
---------------
Alice
영어
---------------
수학
수학
Enrollment는 제너릭을 통해 배열을 만들어 값을 저장하였고 main에서 생성자를 만들어 값을 넣어주었고 그 값들을 출력하는 방법에 대해서 배웠다. .을 활용하여 경로를 잘 파악하고 for문을 새롭게 사용하는 방법에 대해서 기억하자.