JAVA 객체 지향 핵심

(JAVA)연관관계(Association) - 16

mynote6676 2025. 4. 22. 16:52

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