[26] 해당 객체 간의 관계

6301 단어 JavaJava

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
    회원이 대여한 비디오 제목 : 기생충
    회원이 대여한 비디오 주인공 : 송강호

좋은 웹페이지 즐겨찾기