20
Multiple Inheritance CGCII Cho sanghyun’s Game Classes II 1. Multiple-Inheritance 2. Virtual Inheritance 3. Mix-In 4. CGCII Socket Layers

GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

  • Upload
    -

  • View
    154

  • Download
    0

Embed Size (px)

Citation preview

Page 1: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

Multiple InheritanceCGCIICho sanghyun’s Game Classes II

1. Multiple-Inheritance2. Virtual Inheritance3. Mix-In4. CGCII Socket Layers

Page 2: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

실행처리 다중상속이란 ? (1)

다중 상속은 악인가 ?

다중 상속이란 여러 개의 클래스로 부터 상속받는 것 !

Page 3: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

실행처리 다중상속이란 ? (2)

The C++ Programming Language

이 책은 아는 사람이 봐야 알고 모르는 사람은 봐도 모르는 책즉 , 아는 사람은 볼 필요 없고 모르는 사람은 봐도 모르는 책

아래는 다중 상속에 대한 내용 ~ 무슨 의미인지 이해 가는가?

Page 4: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

실행처리 다중상속이란 ? (3)

Page 5: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

실행처리 다중상속이란 ? (4)

다중 상속은 악인가 ?

현대의 많은 언어가 사실상 다중 상속을 지원

현실적으로 왠만한 프로그래밍에서는 다중 상속이 빠짐 없이 보임 .

다중상속에 대한 무조건적인 무용론은 다중 상속에 대한 오해에서 비롯된 것으로 보임 .

Page 6: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

실행처리 다중상속이란 ? (5)

추상화(Abstraction)

다 따로 !!

C++ 효율성의 핵심은

StartStop(…)Steering(…)Accel(…)Brake(…)SetGear(…)

구체화(Implementation)

인터페이스 클래스 정의{

p->StartStop(true);for(int i=0; i<; ++i){

p->Steering(i);P->Accel (i)

}p->brake();p->StartStop(false);

}

void Drive(CarD* p)공용 !

추상화 (Abstraction)

(v)(v)(v)(v)(v)

Page 7: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

실행처리 다중상속이란 ? (6)

한 객체는 여러 개의 Interface 를 가질 수 있다 .

여러 개의 Inteface 를 가진 다중 상속은 얼마든지 있을 수 있다 .

하지만 다중 상속의 진짜 힘은 여기서 부터닷 !!!

사실상 다중 상속이 없으면 효율적인 C++ 프로그래밍이 힘들다 . Java 조차도 단일 상속만을 추구했지만 이런 다중상속의 효용성 문제로 Interface 상속이

란 변태적 개념으로 다중 상속을 넣었다 .( 결국 이런 변태 상속이 또 다른 변태를 낳게 된다 .)

Page 8: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

실행처리 가상상속 (1)

그러나 다중상속의 문제점 !!! 가상 상속은 죽음의 다이아몬드를 만들어 준다 .

IAnimal 이 중복됨 .

(v)(v) 가상 (Virtual) 상속을 하면

IAnimal 이 중복을 막음 !

근데 이게 가상상속의 전부일까 ?

Page 9: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

아래와 같이 2 개의 class 가 정의 되어 있다고 한다면 !

실행처리 가상상속 (2)

class ICalculate{public:

virtual int Calculate() =0;};

class ICalculate{public:

virtual int Calculate() =0;};

class IObject{private:

int m_iValue;public:

int GetValue() const { return m_iValue;}

virtual void PrintCalculated() =0;};

class IObject{private:

int m_iValue;public:

int GetValue() const { return m_iValue;}

virtual void PrintCalculated() =0;};

순수 가상 함수 !

순수 가상 함수 !

Page 10: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

실행처리 가상상속 (2)

class NCalculate : virtual public ICalculate,virtual public IObject

{public:

virtual int Calculate(){

return GetValue() * 2;}

};

class NCalculate : virtual public ICalculate,virtual public IObject

{public:

virtual int Calculate(){

return GetValue() * 2;}

};

class NObject : virtual public ICalculate,virtual public IObject

{public:

virtual void PrintCalculated(){

printf(“Result is %d", Calculate());}

};

class NObject : virtual public ICalculate,virtual public IObject

{public:

virtual void PrintCalculated(){

printf(“Result is %d", Calculate());}

};

CCalculate 는 ICalculate 부분만 구현 !

CObject 는 IObject 부분만 구현 !

IObject 함수

ICalculate 함수

Page 11: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

실행처리 가상상속 (3)

CCalculate 와 CObject 를 다중 상속하게 되면… 객체의 합성

일반적으로 이런 식의 객체 합성을 Mixin 이라 한다 . Java 도 결국 mixin 을 또 다른 변태적 문법으로 지원을 해서 사실상 모든 다중상속을 지원하게 됨 .

Page 12: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

실행처리 Mix-In (1)

CGCII 의 Socket 은 Socket 의 기능을 7 개의 Layer 로 구분하여 정의

Mixin 을 활용하여 정적 컴포넌트를 조합하도록 설계

• 다양한 Socket 을 유연하게 추가 / 변형 / 구성 가능 → Flexiblity

• 성능 손실 최소화 !( 정적 컴포넌트 조합 ) → Performance

• 코딩의 단순화 ( 상속만으로 합성 ) → Simple Coding

Page 13: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

실행처리 CGCII Socket Layers (1)

• [ 저수준 ] Socket 기본 속성

• [ 저수준 ] Receive I/O 처리

• IReceiveable 에서 전달받은 데이터를 Message 별로 분리

• IPacketable 에서 전달받은 Message 에 해당하는 처리

• 사용자 Send 함수 .• Send 하려는 내용을 표준화된 전달 형식으로

ISendRequest 에 전달한다 .

• 중간 가공처리 . 전송하려는 내용을 ISendable 에 전달한다 .

• [ 저수준 ] I/O 로 Send 처리

• 전송이 완료된 후 처리를 위한 것 (Option)

• 접속 후 처리 / 접속 종료 처리를 정의한다 .• 접속지향 (TCP) 면 필수 .

• 접속 요구 기능 (Client 측 )

Page 14: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

실행처리 CGCII Socket Layers (2)

[ 저수준 I/O] •저수준 함수를 호출하여 Receive I/O 처리•ProcessReceivable() 에서 •데이터를 Receive 하고 IPacketable::ProcessPacketable() 을 호출하여 받은 데이터를 넘긴다 !

[ 메시지 분리 ]•ProcessPacketable() 에서 전달된 데이터를 Message 단위로 자른다 .•잘려진 Message 는 ICGMessageable::ProcessMessage() 함수를 호출하여 전달한다 .

[ 메시지 처리 ]•ProcessMessage() 함수에서 전달된 Message 에 따라 처리를 수행한다 .

Page 15: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

실행처리 CGCII Socket Layers (3)

(v) (v)(v) (v)

(v) (v)(v)

Page 16: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

실행처리 CGCII Socket Layers (4)

Page 17: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

class CSocketTCP :public CGNetIO::Socket::NTCP,public CGNetIO::Connectable::NTCP,public CGNetIO::Sendable::NTCP,public CGNetIO::SendRequest::NBase,public CGNetIO::Sender::NStreamGather,public CGNetIO::Receivable::NStream,public CGNetIO::Packetable::NStream<WORD>,public CGNetIO::Messageable::Nbase

{public:

CSocketTCP() {}virtual ~CSocketTCP(){}

};

class CSocketTCP :public CGNetIO::Socket::NTCP,public CGNetIO::Connectable::NTCP,public CGNetIO::Sendable::NTCP,public CGNetIO::SendRequest::NBase,public CGNetIO::Sender::NStreamGather,public CGNetIO::Receivable::NStream,public CGNetIO::Packetable::NStream<WORD>,public CGNetIO::Messageable::Nbase

{public:

CSocketTCP() {}virtual ~CSocketTCP(){}

};

CGCIICho sanghyun’s Game Classes II

실행처리 CGCII Socket Layers (5)

Page 18: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

자주 사용하는 다양한 Socket 을 미리 합성해 놓았다 .

실행처리 CGCII Socket Layers (6)

• 일반 TCP Socket• 가변 Message 크기에 Message Head 를 가진

일반적 Message 처리

• 동일한 크기의 Message 를 처리하는 Socket

• CTCP<T> 에 Connector 를 상속 받은 Socket

• 일반 UDP Socket

• Reliable UDP 를 위한 Socket• 재전송을 위한 처리 구조

• Web 용 Server/Client Socket• 기본적으로 Text 로 동작• '\r\n\r\n' 으로 Message 를 구분• HTTP Decoding • Parsing • 'GET', 'POST‘ 등의 명령어 처리 • 기타 Web 용 처리

Page 19: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

실행처리 다중상속이란 ? (4)

CGCII 은 Mixin 을 통해

• 확장성 (Extensibility)

• 유연성 (Flexibility)

• 은닉 (Encapsulation)

• 효율성 (Efficiency)

• 성능 (Performance)

개인적인 생각으론 C++ 만이 가능 !!

• 편리한 개발 (Easy to Developement)

Page 20: GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance

CGCIICho sanghyun’s Game Classes II

질문 ?예외처리

중간질문 [email protected]