티스토리 뷰

개요


클래스들을 작성할 때 맺을 수 있는 관계에 대해 알아보자.

이는 기법은 아니고 관계에 대한 용어를 배우는 것으로 모른다고 하더라도 코드를 작성할 수는 있지만 용어를 많이 알아두면 다른 개발자들과 소통하기 좋다.






IS A


클래스를 상속할 때 맺어지는 관계이다.

일반적인 상속 구조에서 부모클래스와 자식클래스의 관계를 is a 관계라고 한다. is a 관계인 클래스는 자식 클래스가 가지고 있는 멤버를 무조건 부모 클래스가 가지고 있기 때문에 묵시적인 업캐스팅이 가능하다.


class Parent
{
public:
int a;
};

class Child : public Parent
{
public:
int b;
};

void main()
{
Child* child = new Child();
Parent* parent = child; // 가능
}


Child 클래스가 Person을 상속받았기 때문에 두 클래스 모두 a 변수를 가지고 있는 것이고, 따라서 업캐스팅이 가능하다.

반대로 Person은 b라는 멤버를 가지고있지 않기 때문에 다운캐스팅은 불가능하다.




HAS A


어떤 한 클래스가 자신의 멤버로 다른 클래스의 인스턴스를 가지고 있거나, 다른 클래스를 내부에서 작성할 경우 has a 관계가 성립한다. has a 관계를 맺는 두 클래스는 상속관계가 아니기 때문에 묵시적 캐스팅이 불가능하다.


class Person
{
public:
int b;
Cloth _shirt;
class Face
{
int c;
};
};


위처럼 Person클래스에서 Face 클래스를 새로 작성하거나 Cloth클래스의 인스턴스를 가지고 있을 경우 Person-Face, Person-Cloth 사이의 관계를 has a 관계라고 한다.






마치며


앞으로도 용어에 대해서 공부를 많이 해야할것 같다. 내가 아는 것을 설명하거나 남이 하는 설명을 잘 이해하기 위해서는 기본적으로 사용하는 용어들을 많이 익혀둘 필요가 있다.



'Programming > C++' 카테고리의 다른 글

C++ - 스마트 포인터(smart pointer)  (2) 2019.03.29
C++ - 타입 캐스팅  (0) 2019.03.04
C++ - 메모리 해제  (0) 2017.12.30
C++ - 메모리 생성  (0) 2017.12.30
c++11 - std::shared_ptr로 thread safe callback 구현하기  (0) 2017.11.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함