[26] 해당 객체 간의 관계
1.Class 다이어그램의 상호관계
- 연관관계
-
사람이 차를 가지는 경우
Class Person{
Car myCar;
}
: Person이 소유한 Car myCar이다. -
차가 사람을 가지는 경우 (반대의 경우)
Class Car{
Person person;
}
: Car는 Person person이 렌트한 차량이다.
- 연관관계
public class Manager {
PhoneInfo[] arr = new PhoneInfo[5]; // PhoneInfo 클래스에 대한 10개의 객체를 만들었다.
}
: PhoneInfo이 Manager에 속해있다.
- 양방향 연관
: A는 B가 필요하므로, B를 먼저 만들어야한다.
- 의존 관계와 연관 관계의 차이점
- 의존 관계
: 현재의 클래스에서 다른 클래스로부터 필요한 메서드를 입력매개변수를 통하여 부르는 방식이다.
-
과정 1
: 현재의 클래스 : Member
: 다른 클래스 : Video
: Video 클래스로부터 show() 메서드를 호출 -
과정 2
: 현재의 클래스 : VideoMain
: 다른 클래스 : Member
: Member 클래스를 객체로 만들어서, rentalVide() 메서드를 불렀다.
- 연관 관계
: 현재의 클래스에 있는 멤버 변수(필드)에 다른 클래스를 부르는 방식이다.
- 과정 1
: rental이 속하여 있는 클래스 : Video
: 현재의 클래스의 멤버 변수 : private Video rental
: 현재의 클래스에 멤버 변수가 속한 메서드 : show()
-> set() 메서드로 다른 클래스에서 호출하여 비디오 정보를 출력할 수 있다.
- 과정 2
: 현재의 클래스 : VideoManin
: 객체로 만드는 클래스 : GeneralMember
-> 현재의 클래스에서, 객체 m을 통하여 set()
메서드를 호출하였다. 그리고 비디오 v1에 대한 정보를 넣고, show() 메서드를 통하여 회원과 비디오 모두 출력하였다.
- 연관 관계와 의존 관계의 예제를 나타내보자
회원의 아이디 : aaa
회원의 이름 : 홍길동
회원의 주소 : 동탄
회원이 대여한 비디오 번호 : 1
회원이 대여한 비디오 제목 : 트랜드포머3
회원이 대여한 비디오 주인공 : 서봉수
- 연관 관계 예제
- public class Video
public class Video {
// 멤버 변수(필드)는 변하지 않도록 신중하게 만든다.
// 필드의 변화는 코드 전체에 영향을 준다. -> 기능적인 메서드는 괜찮다.
// 멤버 변수
private String sno; // 번호
private String title; // 제목
private String actor; // 주인공
// 기본 생성자
public Video() {}
// 입력매개변수(입력지역변수)가 있는 생성자 초기화
public Video(String sno, String title, String actor) { // 입력매개변수 선언
super();
this.sno = sno; // 인자선언. 멤버 변수 sno 안에 입력매개변수(입력지역변수)의 값 sno를 넣는다.
this.title = title; // 멤버 변수에 값이 들어갈 때, 들어가는 그 값을 인자라고 한다.
this.actor = actor;
}
// 비디오의 정보 출력 메서드
public void show() {
System.out.println("회원이 대여한 비디오 번호 : "+sno);
System.out.println("회원이 대여한 비디오 제목 : "+title);
System.out.println("회원이 대여한 비디오 주인공 : "+actor);
}
}
- public class GeneralMember
public class GeneralMember {
// GeneralMember 빌린 비디오를 가지고 있는 형태가 되어야한다. -> private Video rental[];
private String id;
private String name;
private String address;
private Video rental; // 대여한 비디오
// 기본 생성자
public void GeneralMember() {}
// 생성자 초기화
// Video rental[]은 빼는게 좋다. 비디오를 빌리지 않아도 회원가입이 가능하기 위해서!
public GeneralMember(String id, String name, String address) {
super();
this.id = id;
this.name = name;
this.address = address;
}
// 회원의 정보 출력 메서드
public void show() {
System.out.println("회원의 아이디 : "+id);
System.out.println("회원의 이름 : "+name);
System.out.println("회원의 주소 : "+address);
rental.show();
}
- public class VideoMain
public class VideoMain {
public static void main(String[] args) {
Video v1 = new Video("1", "경관의피", "조진웅");
Video v2 = new Video("2", "기생충", "송강호");
GeneralMember m = new GeneralMember("1", "홍길동", "가산");
m.setRental(v1);
m.show();
}
}
- 결과값
회원의 아이디 : 1
회원의 이름 : 홍길동
회원의 주소 : 가산
회원이 대여한 비디오 번호 : 1
회원이 대여한 비디오 제목 : 경관의피
회원이 대여한 비디오 주인공 : 조진웅
- 의존 관계 예제
- public class Video
public class Video {
// 멤버 변수(필드)는 변하지 않도록 신중하게 만든다.
// 필드의 변화는 코드 전체에 영향을 준다. -> 기능적인 메서드는 괜찮다.
// 멤버 변수
private String sno; // 번호
private String title; // 제목
private String actor; // 주인공
// 기본 생성자
public Video() {}
// 입력매개변수(입력지역변수)가 있는 생성자 초기화
public Video(String sno, String title, String actor) { // 입력매개변수 선언
super();
this.sno = sno; // 인자선언. 멤버 변수 sno 안에 입력매개변수(입력지역변수)의 값 sno를 넣는다.
this.title = title; // 멤버 변수에 값이 들어갈 때, 들어가는 그 값을 인자라고 한다.
this.actor = actor;
}
// 비디오의 정보 출력 메서드
public void show() {
System.out.println("회원이 대여한 비디오 번호 : "+sno);
System.out.println("회원이 대여한 비디오 제목 : "+title);
System.out.println("회원이 대여한 비디오 주인공 : "+actor);
}
- public class Member
public class Member {
private String id;
private String name;
private String address;
public Member() {}
public Member(String id, String name, String address) {
super();
this.id = id;
this.name = name;
this.address = address;
}
// 의존관계. Video만 쓰고 끝내겠다.
public void rentalVide(Video video) { // Video 클래스에서 show 메서드를 불러왔다.
video.show();
}
- public class VideoMain
public class VideoMain {
public static void main(String[] args) {
// 빌려진 비디오
Video videos[] = {
new Video("1", "경관의피", "조진웅"),
new Video("2", "기생충", "송강호")
};
// 비디오를 빌린 회원
GeneralMember members[] = {
new GeneralMember("1", "홍길동", "가산"),
new GeneralMember("2", "고길동", "강남")
};
// 출력
Member m = new Member();
m.rentalVide(videos[1]);
}
}
- 결과값
회원이 대여한 비디오 번호 : 2
회원이 대여한 비디오 제목 : 기생충
회원이 대여한 비디오 주인공 : 송강호
Author And Source
이 문제에 관하여([26] 해당 객체 간의 관계), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sanggeun/25-해당-객체-간의-관계저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)