꿀서버.gif

피디.gif

20201203_012123.png

우아미.gif

광고베너.gif


♨신규 홍보♨



  1. 동수칸 270,967
  2. 도리toS 267,280
  3. 투혼v 247,331
  4. 타이갓 218,183
  5. 깡따구 201,948
  6. 스쿼드 184,119
  7. 쿠악카미 139,059
  8. 농민2 137,313
  9. 제이스토리 126,619
  10. 하사 112,039
  11. 코난 99,398
  12. 키호 97,380
  13. 두현베어스 91,855
  14. ZicP 90,173
  15. 머니 89,958
  16. 환장하겠네 82,524
  17. 찬혁 81,759
  18. 우리집또털어 81,056
  19. 묻었다 77,930
  20. 나로네 74,643
  21. 마티쿄 71,184
  22. RoseM 68,022
  23. 치즈돈가스덮밥 67,331
  24. 리구스 66,347
  25. godwk 65,221
  26. 뚜루룽이 64,708
  27. 어려서부터 64,018
  28. 김감김 62,860
  29. wkdfj234d 61,926
  30. 개나리 59,253

huuon2.gif


광고베너.gif

♨신규 게시물♨



♨신규 댓글♨


브릿지 패턴 (Bridge Pattern)

sacyz1n2019.08.25 17:54조회 수 158추천 수 2댓글 5

  • 19
    • 글자 크기

ㅎㅇㅎㅇ

 

오늘은 브릿지 패턴을 살펴보겠습니다.

 

bridge 패턴

bridge는 '무엇인가를 연결한다'는 의미이다. bridge 패턴도 두 장소를 연결하는 역할을 한다. bridge 패턴은 기능의 클래스 계층과 구현의 클래스 계층을 연결하고, 구현부에서 추상 계층을 분리하여 각자 독립적으로 변형할 수 있게 해준다.

[그림 5-37]에서 supperClass의 method()는 implementor의 impMethod()를 사용해 구현되고, subClass의 subMethod()는 supperClass의 method()들을 사용해 구현된다. 그 결과 subClass와 implementor(concreteImplement)가 분리된다. bridge 패턴은 구현과 인터페이스(추상화된 부분)를 분리할 수 있고, 추상화된 부분과 실제 구현 부분을 독립적으로 확장할 수 있다.

-출처- 네이버 지식백과

 

뭐 이런 의미랍니다...ㅋ

 

bridge가 다리라는 뜻이 있죠? 

 

즉, 연결해준다는 의미가 되는데,

 

위에서 설명한것 처럼 기능 클래스 계층과 구현 클래스 계층을 연결하고

또, 그 구현클래스에서 추상 계층을 분리하여 각자 독립적으로 변형할 수 있게 해준다. 라고 나와있습니다.

 

근데 뭔 개소린지 모르겠습니다. 처음 보면 이게 뭔 개소리인가 하죠.

 

이제 이 내용을 게임을 예로들어 이해하도록 해보겠습니다.

 

어떤 중세시대 전략 시뮬레이션 게임이 있습니다.

 

이 게임엔 보병, 기병이 있습니다.

 

그런데 보병에도 칼을 쓰는 보병, 활을 쓰는 보병이 있고

 

기병에도 칼을 쓰는 기병, 활을 쓰는 기병이 있습니다. 

 

이 구조를 일반적인 상속구조로 구현하여 표현하면 아래와 같이 될겁니다.

 

제목 없음.png

 

칼, 활 클래스는 각각 모두 보병클래스나 기병 클래스를 상속하고 있습니다.

 

여기까진 좋습니다. 이렇게도 할 수 있지 라고 생각할겁니다.

 

그런데 어느날 게임이 패치가 되어 

 

무기중에 창이 추가가 되어서 창을 쓰는 보병과 창을 쓰는 기병을 개발해야합니다.

 

그래서 열심히 개발해서 위에서 했던 구조와 동일하게 추가하면 아래 그림과 같이 될겁니다.

제목 없음.png

 

 

여기까지도 뭐 이해가 된다고 할 수 있습니다. 

 

못할건 아니기 때문이죠.

 

그런데 지금은 간단한 설명을 위해서 유닛 종류가 보병, 기병 뿐이지만

 

실제 게임에선 엄청나게 많은 종류의 유닛이 있을겁니다.

 

새로운 무기가 추가되어서 그 무기를 사용할 수 있는 유닛을 상속하도록해야하는데 

 

일일이 다 상속시키실껍니까?

 

이걸 이해하셨다면 "확장성"에 문제가 있다는걸 알 수 있으실겁니다.

 

그래서 브릿지패턴이란게 나왔는데

 

맨 처음에 설명했다시피 기능 클래스와 구현 클래스를 분리한 뒤 연결하여 사용합니다.

 

위 예를든 게임에 적용 시켜보면 기능 클래스와 구현 클래스는 아래와 같이 됩니다.

 

1ㅇㅁㅇㄴ.png

 

여기서 기능클래스와 구현클래스를 연결 시킨다는건

 

기능 클래스의 최상위 부모 객체는 구현 클래스의 객체를 멤버 변수로 가지므로써, 이를 연결을 시킨다는 의미라고합니다.

 

이렇게 브릿지 패턴을 사용하면 새로운 무기가 추가될 경우 구현 클래스에만 추가하면 

 

창을 쓰는 보병이던지, 창을 쓰는 기병이던지 쉽게 추가할 수 있어 확장성이 좋습니다.

 

이걸 간단히 코드로 구현해봄으로써 글을 마치도록 하겠습니다.

 

<Main.cpp>

 

0.PNG

 

<CGameObject.h>

 

1.PNG

 

<CGameObject.cpp>

 

2.PNG

 

<CInfantry.h> (보병)

 

3.PNG

 

<CInfantry.cpp> (보병)

 

4.PNG

 

<CCalvalry.h> (기병)

 

5.PNG

 

<CCalvalry.cpp> (기병)

 

6.PNG

 

<CImplement.h>

 

a.PNG

 

<CImplement.cpp>

 

b.PNG

 

<CSword.h>

 

c.PNG

 

<CSword.cpp>

 

d.PNG

 

<CBow.h>

 

e.PNG

 

<CBow.cpp>

f.PNG

 

<CSpear.h>

 

g.PNG

 

 

<CSpear.cpp>

 

h.PNG

 

<출력 결과>

 

i.PNG

 

 

읽느라 고생하셨습니다 ㅂㅂ~

 

추천해주신 분들

  • 19
    • 글자 크기
메이플 모작 진행상황 (툴) (by sacyz1n) 디스코드 봇 만들기 [Create Discord Bot] - 1 (by 토끼린)

댓글 달기

댓글 5
번호 제목 글쓴이 조회 수
55 SQL JOIN 사용법 및 개념22 박효성 49
54 [MS-SQL] 커서(Cursor) 사용하기 박효성 12
53 MSSQL 임시,변수 테이블 적용 하기 박효성 11
52 SQL JOIN 사용법 및 개념 박효성 18
51 sesion.sql_child_number, 박효성 4
50 mysql stored procedires visual stdio 로 디버깅 하기  박효성 11
49 SQL(Structured Query Language) 박효성 10
48 [PHP] 간단한 디스코드 Push 시스템 완전 최소로 구현하기 (매우 간단)3 MJ 206
47 USBWebserver v8.6.2 가장 가벼운 포터블 웹서버4 jhon 210
46 Code 수정 유틸 ollydbg 사용법2 뿌르뿌르 197
45 메이플 모작 진행상황 (툴)9 sacyz1n 734
브릿지 패턴 (Bridge Pattern)5 sacyz1n 158
43 디스코드 봇 만들기 [Create Discord Bot] - 14 토끼린 944
42 파이썬을 이용한 간단한 메이플스토리 만들기(6/20) - 로그인 기능 수정및 다음화면 이미지 넣기8 지금몇시지 857
41 03. 크레이지 아케이드 만들기 (타이머 매니저, 싱글톤 패턴)4 sacyz1n 479
40 02. 크레이지 아케이드 만들기 (PeekMessage, 게임 구조)3 sacyz1n 252
39 01. 크레이지 아케이드 만들기 (윈도우 창 보정,)3 sacyz1n 211
38 00. 크레이지 아케이드 만들기 (Win API 소개)7 sacyz1n 448
37 파이썬을 이용한 간단한 메이플스토리 만들기(5/20) - 회원가입 및 로그인 기능 수정 및 다음 화면 만들기2 지금몇시지 435
36 파이썬을 이용한 간단한 메이플스토리 만들기 공지(포토샵 디자이너 모집)2 지금몇시지 267
첨부 (19)
제목 없음.png
11.3KB / Download 0
">
제목 없음.png
14.2KB / Download 0
">
1ㅇㅁㅇㄴ.png
15.5KB / Download 0
">
0.PNG
43.1KB / Download 0
">
1.PNG
39.5KB / Download 0
">
2.PNG
25.0KB / Download 0
">
3.PNG
22.9KB / Download 0
">
4.PNG
25.8KB / Download 0
">
5.PNG
21.8KB / Download 0
">
6.PNG
26.4KB / Download 0
">
a.PNG
25.5KB / Download 0
">
b.PNG
13.3KB / Download 0
">
c.PNG
24.6KB / Download 0
">
d.PNG
22.0KB / Download 0
">
e.PNG
24.1KB / Download 0
">
f.PNG
21.1KB / Download 0
">
g.PNG
23.8KB / Download 0
">
h.PNG
21.2KB / Download 0
">
i.PNG
11.5KB / Download 0
">

서버에 요청 중입니다. 잠시만 기다려 주십시오...