SlideShare a Scribd company logo
The C++
Programming
  Language
12장 파생클래
     스
          모임명: 아꿈사
            이재정

 https://github.com/jjuiddong/TCPL
파생 클래스

● Employee (노동자)
● Manager (관리자)

공통 정보
 ● 이름
 ● 입사 날짜
 ● 부서

관리자 정보
 ● 관리 하고 있는 직원정보
공통된 정보는 Employee 클래스로 묶고, 나머지
정보들은 파생해서 구현한다.


            Employee




            Manager
상속

1. 상속 받으면 부모 클래스로 부터 모든 정보를
   얻게 된다. 단 public 상속일 때만.
2. 부모의 private 구역은 접근 할 수 없다.
3. protected, private 상속도 가능하나, 대부분
   public 상속을 한다.
파생된 클래스의 생성자와 소멸자

1. 생성자는 부모 클래스가 먼저 호출되고, 파생
   클래스가 호출된다.
2. 소멸자는 그 반대다. 단, 가상 소멸자 함수로
   선언했을 경우만 그렇다.
파생클래스 복사

다른 클래스 계통끼리 복사할 때 주의하자.

복사 손실이 발생 할 수 있다.
클래스 하이어라키

클래스 계통은 방향성 비순환 그래프 구조라고
알려져있다.
클래스 계통이 순환되면 컴파일이 불가능 하다.
가상함수 따라하기

클래스 별로 타입을 주어서 switch case 문으로
함수를 호출한다.
가상함수의 장점

유지보수가 수월하다.
 ● 프로그램 전체에 영향을 미치는 코드를 건드리지 않
   고, 필요한 부분만 수정할 수 있다.

확장성
 ● 인터페이스만 같다면, 어떤 클래스가 파생되더라도
   기존 프로그램에 쉽게 붙일 수 있다.
추상 클래스

인스턴스를 생성할 수 없는 클래스

파생해서 구현해야 하는 클래스

인터페이스를 제공하기 위한 용도
클래스 계통 설계

하향식 구조

문제점
 - 최상위 클래스가 커질수록 유연성이 떨어진다.
하향식 구조 설계
문제점:
1. BBwindow 는 Ival_box의 상위개념이 아니다.
2. BBwindow 와 Swing 등의 UI 라이브러리를
   두개 이상 사용해야 한다면 복잡해 진다.
문제점:
● BBwindow, CWwindow, IBwindow, LSwindow 각각의 라
    이브러리로 전환 될때 마다 거의 모든 프로그램이 리빌
    드 된다.
●   두개 이상의 라이브러리를 동시에 사용 할 수 없다.
추상 클래스 활용
원칙
1. 인터페이스와 구현 세부사항은 떨어뜨리자.
2. 인터페이스에 데이타를 두지말자. 데이타가
   있으면 의존성이 생긴다.
3. 구현 세부를 수정하더라도 Ival_Box 계열의
   클래스는 컴파일되지 않게 하자.
4. 다중 UI 시스템이 동작되게 하자.
Ival_box interface
int get_value() = 0;
void set_value(int i) = 0;
void reset_value(int i) = 0;
void prompt() = 0;
bool was_changed() = 0;
자~ 어떻게 할까요?
 It's Your Turn
조금만 더 생각해봐요
BBwindow, CWwindow 의 slider 역할을 하는 클
래스가 있을 때
최종본
개인적인 생각:
상속이 너무 많다. 다중 상속 때문에 클래스 계통이 복잡하
다. 여전히 컴파일 타임이 길어질 수 있다.
객체 생성 위치를 국한시키기

factory 클래스

상속으로 구현하지 않고, 다른 방식으로 구현할
수 있다는 것을 잠깐 눈요기로 보여준다.

이에 대한 자세한 내용은 뒤에 나올거라 생각한
다. 아니면 템플릿이 그 해결책이라고 생각하는
지도~
바른 프로그래밍을 위한 고수의 조언
1. 타입필드는 반드시 피할 것.
2. 복사손실(slicing)을 피하려면 객체의 포인터 혹은 참조
  자를 사용해야 한다.
3. 깔끔한 인터페이스 제공에 목적을 두고 있다면 추상 클
  래스를 사용하자.
4. 인터페이스를 최소화하려면 추상 클래스를 사용하자.
5. 인터페이스로부터 구현 세부사항을 차단하려면 추상 클
  래스를 사용하자.
6. 사용자 코드를 건드리지 않은 채로 기존 함수의 구현코
  드를 새로 추가하려면 관련 함수들이 가상 함수로 되어
  있어야 한다.
7. 사용자 코드의 재컴파일을 최소화하려면 추상 클래스를
   사용하자.
8. 구현 세부사항이 여러개가 될 수 있는 경우를
   허용하려면 역시 추상 클래스를 사용할 것.
9. 가상 함수를 가진 다형성 클래스에는 반드시 가상
   소멸자가 있어야 한다.
10. 추상 클래스에는 대개 생성자가 필요없다.
11. 겹치지 않는 개념들은 내부 표현 데이터도 반드시
    분리해 놓도록 하자.
END

More Related Content

What's hot

Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Dong Chan Shin
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1정환 임
 
MFC 발견 (1)
MFC 발견 (1)MFC 발견 (1)
MFC 발견 (1)
종훈 박
 
Gpg 1.1
Gpg 1.1Gpg 1.1
Gpg 1.1
Nam Hyeonuk
 
NDC14 - 사례로 배우는 디스어셈블리 디버깅
NDC14 - 사례로 배우는 디스어셈블리 디버깅NDC14 - 사례로 배우는 디스어셈블리 디버깅
NDC14 - 사례로 배우는 디스어셈블리 디버깅Seungjae Lee
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshin
Dong Chan Shin
 
[1B1]스위프트프로그래밍언어
[1B1]스위프트프로그래밍언어[1B1]스위프트프로그래밍언어
[1B1]스위프트프로그래밍언어
NAVER D2
 
[Osxdev]4.swift
[Osxdev]4.swift[Osxdev]4.swift
[Osxdev]4.swift
NAVER D2
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계Eb Styles
 
Ruby_01_Ruby Basic
Ruby_01_Ruby BasicRuby_01_Ruby Basic
Ruby_01_Ruby Basic
team air @ Dimigo
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern
대영 노
 
Swift extensions
Swift extensionsSwift extensions
Swift extensions
wileychoi
 
[부스트캠프 Tech Talk]조찬영_타입스크립트없인 코딩할 수 없는 몸이 되버렸어
[부스트캠프 Tech Talk]조찬영_타입스크립트없인 코딩할 수 없는 몸이 되버렸어[부스트캠프 Tech Talk]조찬영_타입스크립트없인 코딩할 수 없는 몸이 되버렸어
[부스트캠프 Tech Talk]조찬영_타입스크립트없인 코딩할 수 없는 몸이 되버렸어
CONNECT FOUNDATION
 
팩토리 메소드 패턴과 추상 팩토리 패턴
팩토리 메소드 패턴과 추상 팩토리 패턴팩토리 메소드 패턴과 추상 팩토리 패턴
팩토리 메소드 패턴과 추상 팩토리 패턴
GeniusYG
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - java OOM, Reference API
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - java OOM, Reference API[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - java OOM, Reference API
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - java OOM, Reference API
NAVER D2
 
포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전
주항 박
 
Java Script 2 Part.1
Java Script 2 Part.1Java Script 2 Part.1
Java Script 2 Part.1vicki0x
 
EMOCON 2015 - Jspm & systemjs
EMOCON 2015 - Jspm & systemjsEMOCON 2015 - Jspm & systemjs
EMOCON 2015 - Jspm & systemjs
이상한모임
 

What's hot (19)

Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1
 
MFC 발견 (1)
MFC 발견 (1)MFC 발견 (1)
MFC 발견 (1)
 
Gpg 1.1
Gpg 1.1Gpg 1.1
Gpg 1.1
 
1 2 1
1 2 11 2 1
1 2 1
 
NDC14 - 사례로 배우는 디스어셈블리 디버깅
NDC14 - 사례로 배우는 디스어셈블리 디버깅NDC14 - 사례로 배우는 디스어셈블리 디버깅
NDC14 - 사례로 배우는 디스어셈블리 디버깅
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshin
 
[1B1]스위프트프로그래밍언어
[1B1]스위프트프로그래밍언어[1B1]스위프트프로그래밍언어
[1B1]스위프트프로그래밍언어
 
[Osxdev]4.swift
[Osxdev]4.swift[Osxdev]4.swift
[Osxdev]4.swift
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계
 
Ruby_01_Ruby Basic
Ruby_01_Ruby BasicRuby_01_Ruby Basic
Ruby_01_Ruby Basic
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern
 
Swift extensions
Swift extensionsSwift extensions
Swift extensions
 
[부스트캠프 Tech Talk]조찬영_타입스크립트없인 코딩할 수 없는 몸이 되버렸어
[부스트캠프 Tech Talk]조찬영_타입스크립트없인 코딩할 수 없는 몸이 되버렸어[부스트캠프 Tech Talk]조찬영_타입스크립트없인 코딩할 수 없는 몸이 되버렸어
[부스트캠프 Tech Talk]조찬영_타입스크립트없인 코딩할 수 없는 몸이 되버렸어
 
팩토리 메소드 패턴과 추상 팩토리 패턴
팩토리 메소드 패턴과 추상 팩토리 패턴팩토리 메소드 패턴과 추상 팩토리 패턴
팩토리 메소드 패턴과 추상 팩토리 패턴
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - java OOM, Reference API
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - java OOM, Reference API[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - java OOM, Reference API
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - java OOM, Reference API
 
포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전
 
Java Script 2 Part.1
Java Script 2 Part.1Java Script 2 Part.1
Java Script 2 Part.1
 
EMOCON 2015 - Jspm & systemjs
EMOCON 2015 - Jspm & systemjsEMOCON 2015 - Jspm & systemjs
EMOCON 2015 - Jspm & systemjs
 

Viewers also liked

GCGC- CGCII 서버 엔진에 적용된 기술 (3) - Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (3) - ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (3) - Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (3) - Exception
상현 조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server SampleGCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
상현 조
 
Tcpl 14장 예외처리
Tcpl 14장 예외처리Tcpl 14장 예외처리
Tcpl 14장 예외처리
재정 이
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표재정 이
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
상현 조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
상현 조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
상현 조
 

Viewers also liked (7)

GCGC- CGCII 서버 엔진에 적용된 기술 (3) - Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (3) - ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (3) - Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (3) - Exception
 
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server SampleGCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
 
Tcpl 14장 예외처리
Tcpl 14장 예외처리Tcpl 14장 예외처리
Tcpl 14장 예외처리
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
 
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
 

Similar to Tcpl 12장 파생클래스

More Effective C++ 4주차
More Effective C++ 4주차More Effective C++ 4주차
More Effective C++ 4주차Injae Lee
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2
성연 김
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
Dong Chan Shin
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
Shin heemin
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2SeungHyun Hwang
 
Design patterns
Design patternsDesign patterns
Design patterns
Joshua Yoon
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3현찬 양
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
Dong Chan Shin
 
Effective java
Effective javaEffective java
Effective java
Haeil Yi
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Dong Chan Shin
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터
Dong Chan Shin
 
게임 프로그래밍 패턴 12장
게임 프로그래밍 패턴 12장게임 프로그래밍 패턴 12장
게임 프로그래밍 패턴 12장
진화 손
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4
성연 김
 
[아꿈사] The C++ Programming Language 9장 소스 파일과 프로그램
[아꿈사] The C++ Programming Language 9장 소스 파일과 프로그램[아꿈사] The C++ Programming Language 9장 소스 파일과 프로그램
[아꿈사] The C++ Programming Language 9장 소스 파일과 프로그램해강
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013devCAT Studio, NEXON
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
Ryan Park
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
세빈 정
 
디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13
Shin heemin
 

Similar to Tcpl 12장 파생클래스 (20)

More Effective C++ 4주차
More Effective C++ 4주차More Effective C++ 4주차
More Effective C++ 4주차
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
Effective java
Effective javaEffective java
Effective java
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬
 
5 6 1
5 6 15 6 1
5 6 1
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터
 
게임 프로그래밍 패턴 12장
게임 프로그래밍 패턴 12장게임 프로그래밍 패턴 12장
게임 프로그래밍 패턴 12장
 
7 8 1
7 8 17 8 1
7 8 1
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4
 
[아꿈사] The C++ Programming Language 9장 소스 파일과 프로그램
[아꿈사] The C++ Programming Language 9장 소스 파일과 프로그램[아꿈사] The C++ Programming Language 9장 소스 파일과 프로그램
[아꿈사] The C++ Programming Language 9장 소스 파일과 프로그램
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
 
디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13
 

More from 재정 이

6장 표현식 및 문장
6장 표현식 및 문장6장 표현식 및 문장
6장 표현식 및 문장재정 이
 
이중으로 연결된 목록
이중으로 연결된 목록이중으로 연결된 목록
이중으로 연결된 목록재정 이
 
이중으로 연결된 목록
이중으로 연결된 목록이중으로 연결된 목록
이중으로 연결된 목록재정 이
 
Mix 설명
Mix 설명Mix 설명
Mix 설명
재정 이
 

More from 재정 이 (7)

6장 표현식 및 문장
6장 표현식 및 문장6장 표현식 및 문장
6장 표현식 및 문장
 
이중으로 연결된 목록
이중으로 연결된 목록이중으로 연결된 목록
이중으로 연결된 목록
 
이중으로 연결된 목록
이중으로 연결된 목록이중으로 연결된 목록
이중으로 연결된 목록
 
유향트리
유향트리유향트리
유향트리
 
유향트리
유향트리유향트리
유향트리
 
Mix 설명
Mix 설명Mix 설명
Mix 설명
 
이항계수
이항계수이항계수
이항계수
 

Tcpl 12장 파생클래스

  • 1. The C++ Programming Language 12장 파생클래 스 모임명: 아꿈사 이재정 https://github.com/jjuiddong/TCPL
  • 2. 파생 클래스 ● Employee (노동자) ● Manager (관리자) 공통 정보 ● 이름 ● 입사 날짜 ● 부서 관리자 정보 ● 관리 하고 있는 직원정보
  • 3. 공통된 정보는 Employee 클래스로 묶고, 나머지 정보들은 파생해서 구현한다. Employee Manager
  • 4. 상속 1. 상속 받으면 부모 클래스로 부터 모든 정보를 얻게 된다. 단 public 상속일 때만. 2. 부모의 private 구역은 접근 할 수 없다. 3. protected, private 상속도 가능하나, 대부분 public 상속을 한다.
  • 5. 파생된 클래스의 생성자와 소멸자 1. 생성자는 부모 클래스가 먼저 호출되고, 파생 클래스가 호출된다. 2. 소멸자는 그 반대다. 단, 가상 소멸자 함수로 선언했을 경우만 그렇다.
  • 6.
  • 7. 파생클래스 복사 다른 클래스 계통끼리 복사할 때 주의하자. 복사 손실이 발생 할 수 있다.
  • 8.
  • 9. 클래스 하이어라키 클래스 계통은 방향성 비순환 그래프 구조라고 알려져있다.
  • 10.
  • 11.
  • 12.
  • 13. 클래스 계통이 순환되면 컴파일이 불가능 하다.
  • 14. 가상함수 따라하기 클래스 별로 타입을 주어서 switch case 문으로 함수를 호출한다.
  • 15. 가상함수의 장점 유지보수가 수월하다. ● 프로그램 전체에 영향을 미치는 코드를 건드리지 않 고, 필요한 부분만 수정할 수 있다. 확장성 ● 인터페이스만 같다면, 어떤 클래스가 파생되더라도 기존 프로그램에 쉽게 붙일 수 있다.
  • 16. 추상 클래스 인스턴스를 생성할 수 없는 클래스 파생해서 구현해야 하는 클래스 인터페이스를 제공하기 위한 용도
  • 17. 클래스 계통 설계 하향식 구조 문제점 - 최상위 클래스가 커질수록 유연성이 떨어진다.
  • 19. 문제점: 1. BBwindow 는 Ival_box의 상위개념이 아니다. 2. BBwindow 와 Swing 등의 UI 라이브러리를 두개 이상 사용해야 한다면 복잡해 진다.
  • 20. 문제점: ● BBwindow, CWwindow, IBwindow, LSwindow 각각의 라 이브러리로 전환 될때 마다 거의 모든 프로그램이 리빌 드 된다. ● 두개 이상의 라이브러리를 동시에 사용 할 수 없다.
  • 21. 추상 클래스 활용 원칙 1. 인터페이스와 구현 세부사항은 떨어뜨리자. 2. 인터페이스에 데이타를 두지말자. 데이타가 있으면 의존성이 생긴다. 3. 구현 세부를 수정하더라도 Ival_Box 계열의 클래스는 컴파일되지 않게 하자. 4. 다중 UI 시스템이 동작되게 하자.
  • 22. Ival_box interface int get_value() = 0; void set_value(int i) = 0; void reset_value(int i) = 0; void prompt() = 0; bool was_changed() = 0;
  • 23. 자~ 어떻게 할까요? It's Your Turn
  • 25. BBwindow, CWwindow 의 slider 역할을 하는 클 래스가 있을 때
  • 26. 최종본 개인적인 생각: 상속이 너무 많다. 다중 상속 때문에 클래스 계통이 복잡하 다. 여전히 컴파일 타임이 길어질 수 있다.
  • 27. 객체 생성 위치를 국한시키기 factory 클래스 상속으로 구현하지 않고, 다른 방식으로 구현할 수 있다는 것을 잠깐 눈요기로 보여준다. 이에 대한 자세한 내용은 뒤에 나올거라 생각한 다. 아니면 템플릿이 그 해결책이라고 생각하는 지도~
  • 28. 바른 프로그래밍을 위한 고수의 조언 1. 타입필드는 반드시 피할 것. 2. 복사손실(slicing)을 피하려면 객체의 포인터 혹은 참조 자를 사용해야 한다. 3. 깔끔한 인터페이스 제공에 목적을 두고 있다면 추상 클 래스를 사용하자. 4. 인터페이스를 최소화하려면 추상 클래스를 사용하자. 5. 인터페이스로부터 구현 세부사항을 차단하려면 추상 클 래스를 사용하자. 6. 사용자 코드를 건드리지 않은 채로 기존 함수의 구현코 드를 새로 추가하려면 관련 함수들이 가상 함수로 되어 있어야 한다.
  • 29. 7. 사용자 코드의 재컴파일을 최소화하려면 추상 클래스를 사용하자. 8. 구현 세부사항이 여러개가 될 수 있는 경우를 허용하려면 역시 추상 클래스를 사용할 것. 9. 가상 함수를 가진 다형성 클래스에는 반드시 가상 소멸자가 있어야 한다. 10. 추상 클래스에는 대개 생성자가 필요없다. 11. 겹치지 않는 개념들은 내부 표현 데이터도 반드시 분리해 놓도록 하자.
  • 30. END