Download presentation
Presentation is loading. Please wait.
Published byAntoon Christiaens Modified 5년 전
1
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 07. 상속의 이해
2
윤성우의 열혈 C++ 프로그래밍 Chapter 상속에 들어가기에 앞서 윤성우 저 열혈강의 C++ 프로그래밍 개정판
3
상속의 이해를 위한 이 책의 접근방식 윤성우의 열혈 C++ 프로그래밍 위의 흐름대로 상속을 이해하기 바랍니다.
상속은 ‘기존에 정의해 놓은 클래스의 재활용을 목적으로 만들어진 문법적 요소’라고 이해하는 경우가 많다. 하지만 상속에는 다른, 더 중요한 의미가 담겨있다.
4
문제의 제시를 위한 시나리오의 도입 윤성우의 열혈 C++ 프로그래밍
프로그램 전체 기능의 처리를, 프로그램의 흐름을 담당하는 클래스를 가리켜 컨트롤 클래스라 한다. EmployeeHandler의 경우 컨트롤 클래스에 해당한다. 신규 직원 등록 시 전체 급여정보 출력 급여 합계 정보 출력 PermanentWorker는 정규직을 표현해 놓은 클래스이다.
5
문제의 제시 윤성우의 열혈 C++ 프로그래밍 프로그램에 추가할 직급의 형태 확장 이후의 급여지급 방식
이 문제는 영업직과 임시직에 해당하는 클래스의 추가로 끝나지 않는다. 컨트롤 클래스인 EmployeeHandlder 클래스의 대대적인 변경으로 이어진다. 좋은 코드는 요구사항의 변경 및 기능의 추가에 따른 변경이 최소화되어야 한다. 그리고 이를 위한 해결책으로 상속이 사용된다.
6
윤성우의 열혈 C++ 프로그래밍 Chapter 상속의 문법적인 이해 윤성우 저 열혈강의 C++ 프로그래밍 개정판
7
상속의 방법과 그 결과 윤성우의 열혈 C++ 프로그래밍 Person 클래스를 public 상속함 Person 클래스의 멤버
용어정리
8
상속받은 클래스의 생성자 정의 윤성우의 열혈 C++ 프로그래밍
이니셜라이저를 통해서 유도 클래스는 기초 클래스의 생성자를 명시적으로 호출해야 한다. 유도 클래스의 생성자는 기초 클래스의 멤버를 초기화 할 의무를 갖는다. 단! 기초 클래스의 생성자를 명시적으로 호출해서 초기화해야 한다. 때문에 유도 클래스 UnivStudent는 기초 크래스의 생성자 호출을 위한 인자까지 함께 전달받아야 한다. private 멤버는 유도 클래스에서도 접근이 불가능하므로, 생성자의 호출을 통해서 기초 클래스의 멤버를 초기화해야 한다.
9
유도 클래스의 객체생성 과정 윤성우의 열혈 C++ 프로그래밍 실행결과
10
유도 클래스의 객체생성 과정 case1 윤성우의 열혈 C++ 프로그래밍 SoDerived dr3(23, 24);
순서 1. 메모리 공간의 할당 SoDerived dr3(23, 24); 순서 2. 유도 클래스의 생성자 호출 순서 3. 기초 클래스의 생성자 호출 및 실행 순서 4. 유도 클래스의 생성자 실행
11
유도 클래스의 객체생성 과정 case2 윤성우의 열혈 C++ 프로그래밍 SoDerived dr1 순서 1. 메모리 공간의 할당
순서 2. 유도 클래스의 void 생성자 호출 순서 3. 이니셜라이저를 통한 기초 클래스의 생성자 호출이 명시적으로 정의되어 있지 않으므로 void 생성자 호출 순서 4. 유도 클래스의 실행
12
유도 클래스 객체의 소멸과정 윤성우의 열혈 C++ 프로그래밍 실행결과
유도 클래스의 소멸자가 실행된 이후에 기초 클래스의 소멸자가 실행된다. 스택에 생성된 객체의 소멸순서는 생성순서와 반대이다.
13
유도 클래스 정의 모델 윤성우의 열혈 C++ 프로그래밍
기초 클래스의 멤버 대상의 동적 할당은 기초 클래스의 생성자를 통해서, 소멸 역시 기초 클래스의 소멸자를 통해서
14
Chapter 07-3. protected 선언과 세 가지 형태의 상속
윤성우의 열혈 C++ 프로그래밍 Chapter protected 선언과 세 가지 형태의 상속 윤성우 저 열혈강의 C++ 프로그래밍 개정판
15
protected로 선언된 멤버가 허용하는 접근의 범위
윤성우의 열혈 C++ 프로그래밍 private을 기준으로 보면, protected는 private과 달리 상속관계에서의 접근을 허용한다!
16
세 가지 형태의 상속 윤성우의 열혈 C++ 프로그래밍 public 상속 접근 제어 권한을 그대로 상속한다!
단, private은 접근불가로 상속한다! protected 상속 protected보다 접근의 범위가 넓은 멤버는 protected로 상속한다. 단, private은 접근불가로 상속한다! private 상속 private보다 접근의 범위가 넓은 멤버는 protected로 상속한다. 단, private은 접근불가로 상속한다!
17
protected 상속과 private 상속
윤성우의 열혈 C++ 프로그래밍 private 상속의 결과 때문에 이 이상의 상속은 무의미할 수 있다. protected 상속의 결과
18
윤성우의 열혈 C++ 프로그래밍 Chapter 상속을 위한 조건 윤성우 저 열혈강의 C++ 프로그래밍 개정판
19
상속의 기본 조건인 IS-A 관계의 성립 윤성우의 열혈 C++ 프로그래밍
무선 전화기는 전화기의 기본 기능에 새로운 특성이 추가된 것이다. 노트북 컴퓨터는 컴퓨터의 기본 기능에 새로운 특성이 추가된 것이다. 이렇듯 is-a 관계는 논리적으로 상속을 기반으로 표현하기에 매우 적절하다.
20
IS-A 기반의 예제 윤성우의 열혈 C++ 프로그래밍 예제는 도서 본문을 참조합시다!
21
HAS-A 관계를 상속으로 구성하면 윤성우의 열혈 C++ 프로그래밍 경찰은 총을 소유한다. 경찰 has a 총!
has a 관계도 상속으로 구현이 가능하다. 하지만 이러한 경우 Police와 Gun은 강한 연관성을 띠게 된다. 따라서 총을 소유하지 않은 경찰이나, 다른 무기를 소유하는 경찰을 표현하기가 쉽지 않아진다.
22
HAS-A 관계는 포함으로 표현한다 윤성우의 열혈 C++ 프로그래밍
즉, 총을 소유하지 않은 경찰의 표현이 쉬워지고, 추가로 무기를 소유하는 형태로의 확장도 간단해진다.
23
Chapter 07이 끝났습니다. 질문 있으신지요?
Similar presentations