1. 연관 관계란?
연관 관계(Association)는 두 클래스가 독립적으로 존재하면서, 필요에 따라 서로를 참조하거나 협력하는 관계를 의미합니다. 이는 객체지향 프로그래밍에서 클래스 간의 **느슨한 결합(Loose Coupling)**을 형성하며, 두 객체의 생명주기는 서로에게 종속되지 않습니다.
- 비유: 연관 관계는 친구 관계와 비슷합니다. 친구는 서로 도움을 주고받지만, 한 친구가 없어져도 다른 친구는 독립적으로 존재할 수 있습니다.
- 용어:
- 참조: 한 클래스가 다른 클래스의 객체를 필드, 메서드 매개변수, 또는 반환 값으로 사용하는 것.
package com.association;
public class Course {
private String name;
public Course(String name){
this.name =name;
}
//getter메서드
public String getName(){
return name;
}
public void display(){
System.out.println("강의 :" + name);
}
}
package com.association;
public class Student {
private String name;
private Course course; //연관관계(넓은 의미의 연관관계)
public Student(String name) {
this.name = name;
course = null;// 초기에는 수강하지 않음!
}
//수강을 듣다.(과목에 대한 정보는 course에 있다.)
public void enroll(Course coures) {
this.course = coures;
System.out.println(name + "가" + coures.getName() + "강의를 수강합니다");
}
//도전과제
//수강종료 기능만들어보세요
public void end(){
if(course == null){
System.out.println("이미 수강중인 상태가 아닙니다.");
} else {
System.out.println(course.getName() + "수강이 종료됩니다.");
this.course = null;
}
}
//학생의 현재 수강중인 상태를 보여주는 기능
public void showCoures() {
if (this.course != null) {
System.out.println(name + "이(가)" + this.course.getName() + "을 수강하고 있는중");
} else {
System.out.println("수강중인 강의가 없다");
}
}
}
연관 관계 사례 생각해보기
- 야구팀과 야구선수
- 게임과 게이머의 관계
- 의사와 환자의 관계 등등….
package com.association;
public class BaseballPlayer {
private String name;
public BaseballPlayer(String name){
this.name = name;
}
public String getname(){
return name;
}
}
package com.association;
public class BaseballPlayer {
private String name;
private BaseballTeam bTeam;
public BaseballPlayer(String name) {
this.name = name;
bTeam = null;
}
public void join(BaseballTeam bTeam) {
this.bTeam = bTeam;
System.out.println(name + " is joining to " + bTeam.getName());
}
public void showTeam() {
if (this.bTeam != null) {
System.out.println(name + " is joined in " + this.bTeam.getName());
} else {
System.out.println("There is no team joined");
}
}
public void quit() {
if (bTeam == null) {
System.out.println("There is no team joined already");
} else {
System.out.println("Quitting the " + bTeam.getName());
this.bTeam = null;
}
}
public static void main(String[] args) {
BaseballTeam SDP = new BaseballTeam("San Diego Padres");
BaseballPlayer player1 = new BaseballPlayer("Lee");
player1.join(SDP);
player1.showTeam();
player1.quit();
player1.showTeam();
}
}
728x90
'JAVA 객체 지향 핵심' 카테고리의 다른 글
(JAVA) 스타크래프트 만들어 보기 - ver3 (0) | 2025.04.22 |
---|---|
(JAVA)다형성(Polymorphism) - 17 (0) | 2025.04.22 |
(JAVA)Composition(포함 관계) - 15 (2) | 2025.04.21 |
(JAVA)상속(Inheritance) - 14 (0) | 2025.04.21 |
(JAVA)메서드 오버로딩 - 13 (1) | 2025.04.21 |