⭐연관관계
Association
두 클래스가 독립적으로 존재하면서 서로를 참조하거나 협력하는 관계
클래스 간의 느슨한 결합
두 객체의 생명주기는 종속되지 않는다. (생명주기 = 선언~GC)
ex)
학생과 과목
선수와 팀
이는 폭넓은 개념인데
포함관계도 연관관계의 일부다.
⭐ 내부에서 객체가 생성될 때 따로 포함관계라고 한다
1. 학생 클래스 설계
package com.association;
/**
* 4.22 2교시 연관관계
*
* 학생과 과목 클래스의 연관관계를 만들어본다
*/
public class Student {
//member
private String name;
private Course course; //연관관계
//constructor
public Student(String name) {
this.name = name;
course = null; //수강 없음
}
//method
/*
1.강의를 듣는 메서드를 만든다.
과목에 대한 정보는 Course에 있다.
2.학생의 현재 수강상태를 보여주는 기능
3.수강 종료 기능을 만들어보시오
*/
// public void takeCourse(Course course) {
// System.out.println(this.name + "의 수강 과목");
// course.display();
// }
public void enroll(Course course) {
this.course = course;
System.out.println(name + ", " + course.getName() + " 과목 등록" );
}
public void showCourse() {
if (this.course != null) {
System.out.println(this.course.getName() + " 과목을 수강중입니다.");
} else {
System.out.println("수강중인 과목 없음");
}
}
public void end(Course course) {
if (course == null) {
System.out.println("수강중이 아닙니다");
} else {
System.out.println(course.getName() + " 수강 취소");
this.course = null;
}
}
}//end of Student
2. 과목 클래스 설계
package com.association;
/**
* 4.22 2교시 연관관계
*
* 학생과 과목 클래스의 연관관계를 만들어본다
*/
public class Course {
//member
private String name;
//constructor
public Course(String name) {
this.name = name;
}
//getter
public String getName() {
return name;
}
public void display() {
System.out.println(name + "강의");
}
}//end of Course
3. 코드 실행부
package com.association;
/**
* 4.22 2교시 연관관계
*/
public class MainTest1 {
//main
public static void main(String[] args) {
Student student = new Student("홍길동");
Course java = new Course("자바");
Course db = new Course("데이터베이스");
student.showCourse(); //상태
System.out.println();
student.enroll(java); //강의등록
student.showCourse(); //상태
System.out.println();
student.end(java); //수강취소
student.showCourse(); //상태
}//end of main
}//end of class
다음으로 선수와 팀을 만들어 연관관계를 만들어봤다.
1.선수 클래스 설계
package com.association;
/**
* 4.22 2_2교시 연관관계
*/
public class Player {
//member
private String name;
private Team team;
//constructor
public Player(String name) {
this.name = name;
}
//getter
public String getName() {
return name;
}
//method - 입단
public void join(Team team) {
this.team = team;
System.out.println(name + " " + team.getName() + " 입단");
}
//method - 탈단
public void leave(Team team) {
System.out.println(name + " " + team.getName() + " 탈단");
this.team = null;
}
//method - 현황
public void showRoster() {
System.out.print(name + " 팀 현황: ");
if (this.team != null) {
System.out.println(this.team.getName());
} else {
System.out.println("소속 팀 없음");
}
}
}//end of Player
2.팀 클래스 설계
package com.association;
/**
* 4.22 2_2교시 연관관계
*/
public class Team {
//member
private String name;
private Player player; //연관관계
//constructor
public Team(String name) {
this.name = name;
}
//getter
public String getName() {
return name;
}
//method - 영입
public void recruit(Player player) {
this.player = player;
System.out.println(name + " " + player.getName() + " 선수 영입");
}
//method - 방출
public void release(Player player) {
System.out.println(name + " " + player.getName() + " 선수 방출");
this.player = null;
}
//method - 현황
public void showRoster() {
System.out.print(name + " 선수 현황: ");
if (this.player != null) {
System.out.println(this.player.getName());
} else {
System.out.println("등록 선수 없음");
}
}
}//end of Team
3. 코드 실행부
package com.association;
/**
* 4.22 2_2교시 연관관계
*/
public class MainTest2 {
//main
public static void main(String[] args) {
Team team1 = new Team("롯데");
Player player1 = new Player("장원준");
team1.showRoster();
System.out.println();
team1.recruit(player1);
team1.showRoster();
System.out.println();
team1.release(player1);
team1.showRoster();
System.out.println();
player1.showRoster();
System.out.println();
player1.join(team1);
player1.showRoster();
System.out.println();
player1.leave(team1);
player1.showRoster();
}//end of main
}//end of class
'Java' 카테고리의 다른 글
추상 클래스 Abstrct class, 부모클래스를 만들지만 객체로 만들기는 싫을때 (0) | 2025.04.22 |
---|---|
다형성 Polymorphism, 유연한 코드 작성을 위한 개념 (0) | 2025.04.22 |
접근제어지시자 private(-) public(+) protected(#) (0) | 2025.04.22 |
포함관계 Composition, 상속과는 다르다. (1) | 2025.04.21 |
상속과 메서드 오버라이드를 통한 쇼핑몰 회원정보 수정 (0) | 2025.04.21 |