dico.gif


KakaoTalk_20200118_175947712.gif


광고베너.gif


광고베너.gif

♨랭킹 TOP 20♨

  1. 타이갓 141,728
  2. 얍얍 128,756
  3. 도리toS 84,068
  4. 투혼v 67,330
  5. ZicP 60,542
  6. 치즈돈가스덮밥 57,706
  7. 헤이브로 53,374
  8. 깡따구 44,222
  9. 스쿼드 44,123
  10. 머니 36,756
  11. 코난 32,077
  12. 두현베어스 31,298
  13. 뿌리염색 30,969
  14. 키호 30,539
  15. 안인시우안 29,818
  16. 개나리 26,221
  17. 규따네 25,704
  18. Gwoni 25,653
  19. 도라이 23,112
  20. 달콤한 21,765

huuon2.gif



♨신규 게시물♨




♨신규 댓글♨



6faa2286ccd015fb37f28f688e13eac6.png

브릿지 패턴 (Bridge Pattern)

sacyz1n2019.08.25 17:54조회 수 77추천 수 2댓글 4

  • 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) [ubuntu] Apache2, MySQL, PHP 설치 및 MySQL 비밀번호 설정 (by 벨루볼루)

댓글 달기 WYSIWYG 사용

글쓴이 비밀번호
댓글 4
번호 제목 글쓴이 조회 수
65 USBWebserver v8.6.2 가장 가벼운 포터블 웹서버1 jhon 54
64 Code 수정 유틸 ollydbg 사용법1 뿌르뿌르 52
63 메이플 모작 진행상황 (툴)6 sacyz1n 241
브릿지 패턴 (Bridge Pattern)4 sacyz1n 77
61 [ubuntu] Apache2, MySQL, PHP 설치 및 MySQL 비밀번호 설정 벨루볼루 29
60 [ubuntu] MySQL Too many connections 해결1 벨루볼루 33
59 디스코드 봇 만들기 [Create Discord Bot] - 1 토끼린 154
58 파이썬을 이용한 간단한 메이플스토리 만들기(6/20) - 로그인 기능 수정및 다음화면 이미지 넣기5 지금몇시지 272
57 03. 크레이지 아케이드 만들기 (타이머 매니저, 싱글톤 패턴)4 sacyz1n 193
56 02. 크레이지 아케이드 만들기 (PeekMessage, 게임 구조)2 sacyz1n 109
55 01. 크레이지 아케이드 만들기 (윈도우 창 보정,)3 sacyz1n 98
54 00. 크레이지 아케이드 만들기 (Win API 소개)5 sacyz1n 188
53 파이썬을 이용한 간단한 메이플스토리 만들기(5/20) - 회원가입 및 로그인 기능 수정 및 다음 화면 만들기1 지금몇시지 140
52 파이썬을 이용한 간단한 메이플스토리 만들기 공지(포토샵 디자이너 모집)2 지금몇시지 124
51 배치파일로 로그기록 하기! 초코슬램 23
50 ★ 비주얼 베이직6.0 노설치버전은 여기서 ★2 초코슬램 41
49 파이썬을 이용한 간단한 메이플스토리 만들기(4/20) - 회원가입 및 로그인 기능 만들기5 지금몇시지 176
48 파이썬을 이용한 간단한 메이플스토리 만들기(3/20) - 로그인 화면 만들기3 지금몇시지 219
47 포토샵 웹용으로 저장 save for web 비활성화 되어있는경우 활성화시키기 (포토샵 포터블 오류) 관리자 321
46 파이썬을 이용한 간단한 메이플스토리 만들기(2/20) - IDE(통합개발환경)설치편1 지금몇시지 82
첨부 (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
">

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