C++ 상속의 이해(저장용,메모용, 윤성우 열혈 C++ 프로그래밍 정리 CH 7)

RisingJade의 개발기록·2022년 2월 17일
1

Chapter 07. 상속(Inheritance)의 이해


07-1. 상속에 들어가기 앞서

  • 기능의 처리를 실제로 담당하는 클래스를 가리켜 컨트롤 클래스 또는 핸들러 클래스라고 한다.

07-2. 상속의 문법적인 이해

  • 상속이란?

    • 기존 클래스를 재사용하여 새로운 클래스를 작성하는 것
    • 상속을 받게 되면 상속받은 클래스가 지니고 있는 모든 멤버를 물려받는다.
  • 상속받은 클래스의 생성자 정의

    "자식의 생성자는 자신이 상속한 클래스의 멤버를 초기화할 의무를 지닌다. 그래서 자식클래스의 생성자는 부모 클래스의 생성자를 호출하는 형태로 물려 받은 멤버변수들의 초기화를 하는 것이 좋다."

  • 상속의 접근 제한

    • 접근제한의 기준은 클래스이기 때문에 부모 클래스에서 private로 생성된 멤버변수는 자신 클래스에서 직접 접근이 불가능하다.
    • private 멤버는 상속은 되지만 직접 접근이 불가능하기 때문에 부모클래스에서 정의된 public함수(ex. getter, setter)를 통해서 간접적으로 접근을 해야한다.
    • 이렇듯, '정보의 은닉'은 하나의 객체 내에서도 진행이 된다.
  • 상속 관련 용어 정리

    • 상위 클래스 <-> 하위 클래스
    • 기초(base) 클래스 <-> 유도(derived) 클래스
    • 슈퍼(super) 클래스 <-> 서브(sub) 클래스
    • 부모 클래스 <-> 자식 클래스
  • 유도 클래스의 객체 생성과정

    • 유도 클래스의 객체생성 과정에서 기초 클래스의 생성자는 100% 호출된다.
    • 유도 클래스의 생성자에서 기초 클래스의 생성자 호출을 명시하지 않으면, 기초 클래스의 void생성자가 호출된다.( 이때 순서는 기초 클래스 생성자 -> 유도 클래스 생성자 순)
  • 유도 클래스의 객체 소멸과정

    • 소멸 과정도 생성 비슷한 흐름으로 진행된다. 단, 소멸 순서는 생성의 반대이다.(유도클래스->기초클래스)
    • 스택에 생성된 객체의 소멸순서는 생성순서와 반대이다.(지역 변수 같이 스택에 생성된 것)
    • 생성자에서 동적 할당한 메모리 공간은 소멸자에서 해제 해야한다.

07-3. protected 선언과 세 가지 형태의 상속

  • protected로 선언된 멤버가 허용하는 접근의 범위

    • C++의 접근제어 지시자에는 private, protected, public 이렇게 세가지가 존재한다.
    • 접근 제어 범위를 표현하면 다음과 같다. private < protected < public
    • privateprotected 모두 클래스의 외부에서는 접근이 불가능하다.
    • 단, protected는 기초클래스를 상속받는 유도 클래스에서는 접근 가능하다.
    • protected는 클래스 내부에서 쓸 수 있는거지 객체만들어서 외부에 드러낼수 없는건 private이랑 똑같다.

      기초 클래스와 이를 상속하는 유도 클래스 사이에서도 '정보은닉'은 지켜지는 게 좋다.
      protected 또한 신중히 쓸 것!

  • 세가지 형태의 상속

    • public 상속
      • private를 제외한 나머지는 그냥 그대로 상속한다.
        class Derived : public base
        {
        ...
        };
    • protected 상속
      • protected보다 접근의 범위가 넓은 멤버는 protected로 변경시켜서 상속하겠다.
      class Derived : protected base
      {
      ...
      };
    • private 상속
      • private보다 접근의 범위가 넓은 멤버는 private으로 상속시켜서 상속하겠다.
      • 사실 원래 private는 상속해도 접근 불가고.. 나머지것들도 자식클래스 내부에서만 쓰이도록 private가 되버리니 쓰기 까다로워 진다.

07-4. 상속을 위한 조건

  • 상속을 위한 기본 조건인 IS-A 관계의 성립

  • HAS-A 관계도 상속의 조건은 되지만 복합관계로 이를 대신하는 것이 일반적이다.

    • 상속으로 묶인 두 개의 클래스는 강한 연관성을 띤다.
    • 따라서 확장에 문제가 많이 생길 수 도 있으니 프로그램의 변경에 많은 제약을 가져다 줄 수 있다.
    • IS-A 까지는 쓰되 HAS-A는 되도록 자제하자.
profile
언제나 감사하며 살자!

0개의 댓글