본문 바로가기

상속/포함/딜리게이션 재사용의 방법에는 3가지가 있다. 1.상속 2.포함 3.딜리세이션 상속은 부모의 모든것을 다 받는다. 포함은 포함 하는 녀석의 것 중에서 원하는 것만을 받을 수 있다. 그런데 이 상속과 포함의 단점은 빼도 박도 못하는 단점이 있다. 한번 상속받거나 포함했으면 끝까지 상속/포함을 해야한다. 그리고 상태 변화도 불가능하다. 이것이 가능한것은 딜리게이션뿐~! 여러개의 행위가 클래스로 정의되고 그 녀석들은 하나의 같은 부모 클래스를 상속한다고 한다. 그리고 이 클래스들은 가상 복사 생성자를 가지고 있다. (가상복사 생성자 : 가지 자신을 복사해서 넘겨주는 것이다.(자신의 this포인터를 return)) 이제 이 행위들을 사용하는 클래스는 부모클래스로 이 녀석들을 받는것이다. 그러면 다른 행위로 바꾸고자 할때 부.. 더보기
Copy copy 에는 shallow copy(얕은복사)와 deep copy(깊은복사)가 있다. 1.shallow copy 얕은복사의 경우에는 스택의 같을 그대로 스택으로 복사하는 것이다. 2.deep copy 깊은 복사는 완벽하게 복사해내는 것이다. 포인터가 이 둘을 가르는데 아주 적절한 녀석이다. 포인터의 경우에 스택에는 힙영역의 주소가 들어있고 값은 힙에 들어 있다. 포인터를 copy할때 얕은복사로 스택의 값을 복사하게 된다면 하나의 힙 메모리 영역을 복사한것이다. 이러면 다른 두개의 포인터변수가 하나의 힙 영역을 가리키고 사용하는 것이다. 이런복사는 메모리 릭을 발생시킨다. 우리가 원한 포인터 copy는 새로운 힙영역에다가 같은 값을 주고 싶은 것이다. (때로는 이 얕은 복사를 사용하기도 하지만 지금 우리.. 더보기
reference(참조자) C에는 없고 C++에는 있는것이 바로 이 reference이다. 레퍼런스란 일종의 별명, 별칭 이다. 참조자를 만들기 위해서 & 를 사용한다. 참조자는 생성(선언)시에 초기화가 되야한다. 그리고 레퍼런스는 바꿀 수 없다. reference역시 당연히 상수성을 유지해야 한다! (비const 가 cosnt를 받을 수 없다.) 이 reference가 나옴으로써 우리가 많이 들어보던 call by reference가 가능해진것이다!! 이 얘기를 하기전에 우리는 포인터를 사용해서 call by address를 했었다. (이 녀석은 call by reference 를 흉내낸 것이다...) reference를 이용한 call by reference는 call by address보다 훨씬 사용하기 편리하다. 왜냐면 포.. 더보기