집합aggregation
Has-a 어떤 사람이 자동차를 가지고 있다.
사람이 없어도 자동차는 있을 수 있다(느슨한관계)


학교에는 수업,교수,학생이 있다.

한교수가 여러개의 강의를 할 수 있고
한학생이 여러 수업을 들을 수 있다.

구성관계로 개발하면 정보가 공유되지 않는다.
또, 강의 객체가 없어지면 모든 정보가 사라진다.
객체1 : 학교{강의{교수,학생}
객체2 : 학교{강의2{교수,학생}

집합관계로 개발하게되면 
강의,교수,학생을 따로 생성하고 주소를 공유한다.
강의1,강의2,교수1,교수2,학생1,학생2,학생3을 생성한다.
강의1 안에 교수1,학생1,학생2의 메모리 주소를 공유한다.
강의2 안에 교수2,학생1,학생2,학생3의 메모리 주소를 공유한다.

이렇게하면 강의1이 없어지더라도 교수1,학생1,학생2의 정보는 남는다.


다만, 분산처리할땐 메모리가 분리되어있어 사용못한다.

 

#include <iostream>

//강의
#include "Lecture.h"
//교수
#include "Teacher.h"
//학생
#include "Student.h"

int main()
{
	using namespace std;
	//다른곳에서 쓰게되면 동적할당으로 사용함.
	Student std1("Jack", 0);
	Student std2("cho", 0);
	Student std3("ahn", 0);

	Teacher t1("t_lee");
	Teacher t2("t_choi");

	Lecture lec1("test1");
	lec1.assignTeacher(&t1);
	lec1.registerStudent(&std1);
	lec1.registerStudent(&std3);

	Lecture lec2("test2");
	lec2.assignTeacher(&t2);
	lec2.registerStudent(&std1);
	lec2.registerStudent(&std2);
	lec2.registerStudent(&std3);

	{
		cout << lec1 << endl;
		cout << lec2 << endl;

		lec1.study();
		cout << lec1 << endl;
		cout << lec2 << endl;


	}
}

+ Recent posts