학습목표
.을 이용해 연결구조를 알아보자
 
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문을 새롭게 사용하는 방법에 대해서 기억하자.