⭐연관관계
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

+ Recent posts