간단한 FX용어 설명

마지막 업데이트: 2022년 3월 27일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
[그림 3] 게임 루프

간단한 FX용어 설명

Private 5G

포탈

5G특화망, 이음5G, 로컬 5G

MNO

Vendor

| Druid JMA ASOCS blackned

Telco

오늘날 무선 인터넷(Data Service)을 위해 가장 많이 사용되고 있는 기술은 LTE/WiBro/3G가 아닌 바로 "무선랜" (= Wi-Fi = Wireless LAN) 입니다. 왜 그럴까요? 그건 LTE/WiBro/3G등은 통신 사업자가 그 망을 구축하기 위해서 "매우 매우" 많은 돈(조 단위)이 드는 반면 무선랜은 구축 비용이 매우 저렴합니다.

그래서 오늘은 통신사업자가 구축하는 Wi-Fi Hotspot을 위한 무선랜 표준 이야기와 기본 용어에 대해서 설명드리겠습니다. 본 내용은 무선랜에 대한 공부를 시작하시는 분들에게 큰 틀을 보여 드리기 위함이고, 이후 각 기술부분에 대한 상세 설명은 이후에 차차 소개해 드리겠습니다.

일단 "Wi-Fi"와 "Wireless LAN" 용어의 차이는 뭘까요? 이를 이해하기 위해서는 무선랜 표준 기관에 대한 이해가 필요한데요.

  • IEEE: IEEE 802.11 Working Group에서 "Wireless LAN"이란 용어를 사용하였고, 이 표준에서는 주로 무선랜(무선 구간)에 대한 MAC과 PHY 계층을 다루고 있습니다. (http://www.ieee802.org/11/)
  • Wi-Fi Alliance: 벤더(무선랜 제조사 및 통신사업자)를 중심으로한 비영리 단체이며 여기서 "Wi-Fi"란 용어를 사용하였고, 본 단체에서는 IEEE 802.11 무선 기술을 이용하여 사용자에게 Wi-Fi 서비스를 제공키 위한 전체적인 네트워크 구조 정의와 장비 인증(장비가 시장에 나오기 전에 받는 인증 딱지) 발급을 하고 있습니다. 우리나라도 올 9월부터 TTA에서 이 Wi-Fi 장비 인증(Certificate)을 하고 있다고 들었습니다. (http://www.wi-fi.org)

그래서 Wi-Fi와 Wireless LAN은 그 용어를 정의한 단체의 차이가 있다고 보시면 되고, 편하게 "무선랜"="Wi-Fi"="Wireless LAN"이라 생각하시면 될 것 같습니다. (보통은 Wi-Fi란 단어를 많이 사용하지요)

이제 IEEE와 Wi-Fi Alliance를 섞어서 무선랜에서 다루는 기술용어를 살펴 보도록 하겠습니다. 설명에 앞서 아래 그림의 Wi-Fi network element를 먼저 살펴 보면,

  • STA(Station): IEEE 802.11 용어이며, Wi-Fi 단말(Wi-Fi interface를 가진 단말)을 지칭합니다.
  • AP(Access Point): 802.11 Wireless LAN 인터페이스와 802.3 Ethernet 인터페이스를 가지는 장비로, STA가 보낸 데이터를 무선으로 받아 Ethernet Port를 통해 유선망으로 보내 주는 장비입니다. (AP 혹은 유무선공유기란 단어는 다들 익숙하시죠?)
  • AAA: STA(단말)를 인증해 주는 서버입니다.
  • Home AAA: 만약 Wi-Fi 로밍을 하게 되는 경우(현재 KT, SKT에서 모두 제공), 인증은 Home AAA에서 받게 됩니다. 예를 들어, KT Wi-Fi 로밍 서비스를 받고 있는 제가 미국으로 출장을 갔습니다. 그리고 KT와 로밍 제휴된 AT&T AP에 접속을 하면 저에 대한 인증은 AT&T AAA를 거쳐 KT AAA(그림에서 Home AAA)에서 받게 됩니다.

PHY & MAC

IEEE에서는 802.11a, b, g, n등의 표준을 통해 무선구간의 기능(쉽게 얘기하면 "대역폭")을 향상시키고 있습니다. 예를 들어, 최근의 표준인 802.11n은 600Mbps의 속도를 제공합니다. 현재 시중에 있는 무선랜 단말(노트북, 스마트폰, 패드류 등)은 보통 802.11b/g/n을 지원합니다. 물론 AP도 이 표준들을 지원하고 있겠죠.

Authentication & Security

사용자 인증과 무선구간의 암호화에 대한 이야기인데요.

먼저 IEEE에서는 802.1X라는 표준을 통해

  • 단말과 L2 스위치간에 EAP 프로토콜(정확히는 EAPoL: EAP over LAN)을 사용하여 사용자 credential(예. 사용자 ID/PW)을 L2 스위치로 전달하고,
  • L2 스위치와 AAA간에 RADIUS 프로토콜을 사용하여 사용자 credential을 AAA로 보내어 사용자 인증을 하게 하자.

고 정의하였습니다(여기서 EAP와 RADIUS 프로토콜은 IETF RFC 표준임).

이 표준은 무선랜을 위한 인증 표준은 아니고 출발은 유선랜의 인증 방식을 위한 것이었는데(그래서 위의 설명을 L2 스위치로 함), 이 표준을 802.11에서 가져 왔습니다. 그래서 802.11에서는 "802.1x 기반의 인증"(= "EAP 기반의 인증")을 가입자 인증 방식으로 사용하였습니다(EAP 기반 인증에는 EAP-TLS, PEAP, EAP-TTLS, EAP-AKA/EAP-SIM 등등 그 방법이 다양함). 그리고 무선 구간의 암호화 방식으로는 WEP를 정의하였습니다. 그런데 다들 들어 보셨겠지만 WEP는 보안에 매우 취약한 문제가 있어 다들 사용하지 말라고들 하지요.

한편 IEEE에서 표준화를 진행하고 있는 동안, Wi-Fi Alliance도 열심히 뭔가(WPA & WPA2)를 만들어 가고 있었습니다. 이 WPA & WPA2에서는 인증 방식은 IEEE에서 정의한 802.1X 기반의 인증을 그대로 사용하되 WEP는 문제가 많으니 다른 방식의 무선구간 암호화 방식을 정의하였고 이것이 TKIP(WPA)과 CCMP(WPA2) 입니다. (CCMP 대신 AES라고도 표현합니다.)

그런 후 IEEE에서는 Wi-Fi Alliance에서 정의한 WPA와 WPA2 방식을 자신의 표준에서 받아 들이게 되었고, 그 표준이 IEEE 802.11i입니다.

인증과 암호화 방식을 간단히 정리하면 다음과 같습니다.

  • "인증을 위해 Wi-Fi 단말과 AP 사이는 EAP 프로토콜(=802.1x 프로토콜)을 사용하고, AP와 AAA 사이는 RADIUS 프로토콜을 사용한다. 그래서 단말의 인증 요청은 AP를 거쳐 AAA로 전달되고, AAA가 단말 인증을 한다"
  • "Wi-Fi 단말과 AP 사이의 무선 구간의 암호화는 WEP, TKIP(WPA), CCMP(WPA2) 방식이 있으며, WEP는 안쓰는 것이 좋다. 가능하다면 CCMP(=AES)를 써라"

Authentication for Roaming Case

자 이제 로밍(KT 가입자가 미국에 출장가서 Wi-Fi 사용)입니다. 로밍 규격은 IEEE와는 별 관계가 없구요. 주로 Wi-Fi Alliance의 산하기관인 WBA(Wireless Broadband Alliance)에서 정의하고 있습니다.

일단 가입자 인증 부분인데요. EAP 기반의 인증은 EAP-TLS, EAP-TTLS, EAP-AKA, EAP-SIM 등등 매우 다양한 방식이 존재하고 각 통신사업자마다 자기들 정책에 맞는 걸 사용하고 있습니다. 즉, 이렇게 EAP 기반의 서로 다른 인증 방식을 사용하고 있는 상황에서 어떻게 로밍 유저가 인증을 간단한 구조로 받을 수 있게 할까? 라고 고민하던 WBA에서는 UAM(Universal Access Method)이라는 걸 정의하였는데요. 이 문서(표준은 아님)가 WISPr(Wireless Internet Service Provider roaming) 1.0/2.0 입니다. 별건 아니구요. 로밍에 대해서는 "EAP 같은거 사용하지 말고, HTTP를 지원만 하면(즉, 웹브라우져만 있으면) 인증을 받을 수 있는 방법을 정의하자!"입니다.

그래서 이 방식의 경우, KT 가입자가 미국에 가는 경우, EAP 기반의 인증이 아닌 KT로 부터 받은 ID/PW를 HTTPS에 실어서 미국에 위치한 Wi-Fi AP로 보내면, 이 AP는 가입자의 ID를 보고(ID는 [email protected]으로 구성이 되어 있어 domain을 보면 어떤 나라 사업자인지 알 수 있음. 예를 들어, [email protected]) KT AAA(Home AAA)로 RADIUS 메시지를 릴레이(Realm based Routing) 하게 되는 것입니다. 이때 각 사업자간의 AAA 연동 규격도 WBA에서 정의하였는데 이것이 WRIX-i 입니다.

통신 용어 정리 / 용어 모음

통신망의 분류
- LAN(Local Area Network) : 근거리 제한된 영역 내의 컴퓨터 간에 통신
- MAN(Metropolitan Area Network) : LAN 의 확장된 개념 , LAN 간간 상호 접속망
- WAN(Wide Area Network) : 도시 및 국가 간 등 넓은 지역
# 성능
- 속도 : LAN > MAN > WAN
- 범위 : WAN > MAN > LAN
# 시대별 상황
- 1990 년대 : 인터넷의 급격한 성장 , Web 기반의 인터넷 서비스의 일반화 , ISDN, ADSL 등 디지털 통신 방식 등장
- 2000 년대 : 통신망의 발달 및 확산 , ISDN, ADSL 등 상용화 , 무선 네트워크 사용의 확산 , 초고속 통신망의 보급

주요 용어
1. 프로토콜 ( 통신규약 , Protocol)
- 통신하는데 필요한 공통의 절차와 규칙의 집합

2. 대역폭 (Bandwidth)
- 단위 시간 ( 초 ) 당 정보의 양
e.g.) 100 Mbps : 초당 100M Bits의 데이터 전송(100 Mbps /8 = 11Mb/s)

3. 모뎀 ( 변복조기 , Modem)
- 디지털 / 아날로그 신호 변환 장치
- 디지털 신호를 전화선으로 보내기 위해 아날로그 신호로 변조
- 수신 측은 그 신호를 반대로 디지털 신호로 복조 , 최근 초고속 통신망의 보급으로 사용이 점차 줄어드는 추세
- 먼 거리의 컴퓨터 통신은 직접 연결이 불가해 전화망을 사용

4. 백본 (Backbone)
- 모든 네트워크가 붙어 있는 최상위 네트워크로 신뢰성이 필수

5. DTE(Data Terminal Equipment)
- 데이터 통신 제어 기능을 갖는 단말기나 서버를 총칭
e.g.) 데이터 단말장치 -> 컴퓨터 , 프린터 , 중계기 , 단말기 등

6. 통신방식
- DTE( 통신 단말기) 간의 자료 흐름의 방향과 동시성 여부에 따라 단방향과 양방향 ( 반이중 , 전이중 방식)으로 나뉨
1) 단방향 통신 (Simplex Communication)
- (쌍방 고정) 한쪽으로만 정보가 전달되며 일반 데이터 통신에는 부적합 , TV 방송 , 라디오 방송 등
2) 반이중 통신 (Half Duplex Communication)
- (쌍방 비고정) 두 DTE 가 시간적으로 교대로 데이터를 교환하는 방식 , 무전기 , 팩스 등
3) 전이중 통신 (Full Duplex Communication)
- 두 DTE 가 동시에 송수신 , 일반적인 데이터 통신에서 사용되는 방식
- 송신과 수신을 독립적으로 할 수 있는 두 개의 채널이 필요 , 유무선 전화기 등

7. 회선 교환 네트워크 (CSDN)
- 기존 전화망을 이용한 통신망 , 간단한 FX용어 설명 추가 비용이 없음 , 보안성 취약
- 연결이 이루어지면 다른 가입자들에 대해 연결이 폐쇄 ( 폐쇄회로 )
- 대용량의 데이터가 지속적으로 전송되어야 할 때 유리 , 전용선 효과

8.
패킷 교환 네트워크 (PSDN)
- 한 회선으로 여러 컴퓨터가 동시 통신 , 노드는 축적 - 전송 방식 통신
- 데이터는 다중 경로를 통한 일정한 크기의 패킷 단위로 전송됨 , 다른 경로를 통해 전달 가능

9. LAN
의 응용 유형
- 물리적 자원의 공유 , 파일 전송 기능 , 처리기 (processor) 공유 , 외부망 접속 기능

10. 전송매체
- UTP : 꼬임 쌍으로 된 케이블 (unshielded twisted pair)
- 동축 케이블 : 구리선 ( 전화선 ), 광섬유

11. LAN 의 구성 형태 ( 토폴로지 , Topology)
1) 버스형 (Bus Type)
- 하나의 공통선 ( 버스 ) 에 T 자형으로 각 노드들이 접속되는 형태
- 메시지가 전송 중이면 , 수신하는 노드만 통신하고 , 타 노드는 대기
- 케이블 설치 비용이 최소이며 한 노드의 고장이 타 노드에 영향 없음
- 거리가 멀어지면 중계기가 필요
2) 링형 (Ring Type)
- 노드들을 점대점 (point to point) 형태로 연결하여 링 모양으로 구성
- 각 노드는 수신 신호의 재생이 가능하며 인접 노드로 재전송
- 링 상의 신호는 일정 방향으로만 전송됨
- 한 노드에 장애가 발생할 경우 링이 단절되어 네트워크가 동작 불가능
- 노드의 변경이나 추가가 비교적 어려움
3) 스타형 (Star Type, 방사형 )
- 중앙의 제어 노드를 중심으로 각 노드들이 점대점 형태로 연결
- 주 컴퓨터에 직접 연결되는 통신 회선에 모든 노드가 접속
- 각 노드들 간의 직접적인 연결은 없어서 배선과 노드 관리가 용이
- 노드들의 응답은 빠르나 주 컴퓨터에 많은 부하
- 중앙의 제어 노드의 성능에 따라 전체 망의 신뢰도와 성능이 좌우

12. 원거리 통신망 (WAN)
- 주로 LAN 과 LAN 을 연결하는 수단으로 사용됨 , 공중망 형태로 운영
1) WAN 의 특징

- LAN 보다 느림 , LAN 보다 먼 거리를 연결함 , 비용이 많이듬, 에러율이 높음

2) WAN 의 연결 방식
- 점대점 방식 : 속도가 매우 빠르며 안정성이 뛰어남 , 대규모 WAN 구축 시 많은 비용이 소요
- 그물 방식 : 네트워크 확장 시 추가 장비가 필요 없음 , 점대점 방식보다 비용이 매우 저렴 통신회선의 총경로가 가장 김 , 장애가 있어도 다른 경로를 통해 데이터 전송 수행 , 현재 인터넷의 형태

13. NIC(network interface card) 의 분류
- 각 표준 분류의 명칭은 다음과 같은 형식으로 정의
- < 전송속도 >< 전송방식 >< 세그먼트 길이 또는 매체 유형 >
e.g.) 100 BASE5 : 전송 속도 100 Mbps, 베이스밴드 신호 전송 , 세그먼트의 최대 길이는 500M 를 의미

14. 허브 (Hub)
- 데이터가 한 곳으로 간단한 FX용어 설명 모이는 장소 , 수신 데이터는 다시 전달됨 , 리피터 기능
- 종류
1) 더미 : 한 선의 입력 신호를 다른 모든 선으로 그대로 전달
2) 스위칭 : 목적지 주소로 입력 신호를 재전송

15. 라우터 (Router)
- 통신망 내의 통신 흐름의 경로를 결정하여 신속히 처리하기 위한 컴퓨터 또는 중계 장치
- 네트워크 간에 데이터를 송수신 가능
- 다른 라우터와 통신을 하고 주어진 정보로 목적지까지 최적의 경로 제공

16. 게이트웨이 (Gateway)
- 한 네트워크 프로토콜을 다른 네트워크의 프로토콜로 변환하여 완전히 다른 네트워크 간에도 통신이 가능토록 함

17. 브리지 (Bridge)
- 같은 종류의 프로토콜의 2 개 이상의 LAN 을 접속하는 장치

18. 종합정보 통신망 (Integrated Service Digital Network, ISDN)
- 각종 통신기기를 하나의 디지털 망으로 연결하여 여러 통신 및 정보 서비스를 단일망으로 묶음
- 정의
1) 음성과 디지털 신호를 하나의 전화망을 통해 제공하는 통합서비스
2) 모뎀과는 달리 , 전화와 데이터 전송을 위한 각각 독립된 채널 사용
3) 따라서 , 전화의 사용과는 상관없는 통신이 가능
- 특징
1) 전화 , 데이터 통신, 팩시밀리 등 다른 개체의 통신을 1 개의 가입자 회선 사용
2) 단말들을 하나의 선에 디지털 다중화로 복수 접속하며 상대와 동시 통신
3) 회선 교환과 패킷 교환의 쌍방향 교환 기능 제공
4) 고정 접속에 의한 디지털 전용선으로서 통신 기능도 제공
5) 64 Kbps의 전송속도를 기준으로 1.5 Mbps까지 고속 통신

19. 비대칭 디지털 가입자 회선 (Asymmetric Digital Subscriber Line, 간단한 FX용어 설명 ADSL)
- 기존 전화선을 음성용 (0~ 4KHz), 데이터용(4KHz~2.2 MHz)으로 대역을 분리하여 음성과 데이터를 동시에 전송
- 장점 : ISDN 보다 빠른 속도 지원 , 전화선을 그대로 이용하여 비용 절감
- 단점 : 전화선 노후 상태 , 전화국과의 거리 , 잡음 정도에 속도가 민감

바이오,제약 취업 준비 이야기

제약 바이오에 대해 공부하면서, QbD에 관한 이야기를 많이 들었지만, 실제로 정확한 개념을 인지 하지 못하였다. 머리 아프지만 이쪽 산업에 취업을 하려면 알고 있어야 하는 내용이었기 때문에 Youtube의 영상과 KOCW 강의 영상을 이용해 정리를 해보았다.

QbD

GMP: Good manufacturing practice의 약자로서 의약품(Good) 제조 및 품질관리(practice) 기준

cGMP: current GMP의 약자로서 미국의 GMP

GMP는 생명을 다루는 의약품의 품질확보를 위해 필요한 규정이다. 표준화를 목표로 모든 제조 작업 품질에 관련된 일을 문서화하는 특징을 가지고 있다.

QbD: Quality by Design의 약자로서 설계기반 품질 고도화를 뜻한다. ①목표를 미리 정하여 시작함 ② 합리적인 과학과 품질 위험 관리에 기반한 제품 및 공정의 이해와 공정 관리를 강조하는 체계적인 의약품 개발 방식

2. 기존 GMP와 QbD

미국과 유럽에 제약품을 수출하기 위해서는 ICH의 QbD 관련 조항이 필수적으로 포함되어야 한다.

ICH란 국제 의약품 규제 조합(International Council of Harmonization)의 약자로서 미국, 유럽에서 의약품 제조 시 필수적으로 지켜야할 사항을 담고 있다.

1) 의약품 개발 및 품질관리의 전통적 방식

1. 제약공정(물질 특성, 공정 변수)

경험에 의존한 공정 조건 선정

단일 변수 실험으로 운영 범위 선정

소수의 Batch 데이터를 통한 규격 선정

제품 테스트를 통한 품질 관리

임상 결과와 품질 특성 간 관계 불명확

공정을 고정하고 재현성 확보에 중점

① 의약품 개발 및 품질 관리의 전통적 방식은 테스트에 의존하고 있어 근본적인 한계를 지님

② 의약품 설계 및 개발 단계에서 제품과 공정에 대한 깊은 이해가 요구됨

③ 철저한 공정관리를 통해 불량이 발생하지 않도록 해야 함

3) QbD 접근 방식

전통적 접근 방식과 다른 반대 방향의 흐름을 가짐

공정 변수를 찾고 공정 설계

QbD는 다음과 같이 설명될 수 있다.

1. Product Understanding: 이 단계의 최종 결과물은 CQA(중요품질특성)

① QTPP(품질 목표 사항)을 기술

② QTPP 달성 여부를 평가하기 위한 정량적 지표인 QA를 도출

③ QA중 중요한 항목을 CQA로 선정

QTPP: 광희만큼 홀쭉한 몸매를 원한다

QA: 허리둘레 34인치 이하, 몸무게 몇 이하(CQA), 엄지둘레

QTPP(Quality target product profile): 품질 목표 사항 ①의약품의 예측적 특성 요약 ②의약품의 안정성과 유효성을 감안 ex) 투여 경로, 함량, 용기, 포장, 활성 성분의

방출 또는 전달, 제제의 품질기준(무균성, 순도, 안정성)

CQA(Critical quality attribute): 중요 품질특성 원하는 제품 품질을 보장하기 위해 적절한 한도, 범위, 분포 이내에 있어야하는 물리적, 화학적, 생물학적, 미생물학적 특성

QA: 품질 내용들, 함량, 함량 균일성, 용출, 불순물

2. Process Understanding: 이 단계의 최종 결과물은 CPP와 Design Space

① CQA에 많은 영향을 미치는 CPP 파악

② CQA 품질에 문제없는 CPP의 허용범위인 Design space 도출

CPP(Critical process parameter): CQA에 중요한 영향을 주는 공정 변수, 제품품질을 확보하기 위해 반드시 모니터링 및 관리되어야 하는 것들

Design Space: 품질 보증과 연관된 공정 변수와 투입 변수의 다차원적 조합과 상호작용

→ Design space 안에서의 작업은 변경으로 간주되지 않음

→ DoE를 통해 동시에 여러 개의 변수를 함께 실험해야 파악 가능 (소프트 웨어의 사용), DoE- Design of experiment

CPP: 탄수화물 섭취량, 지방 섭취량 Design space :탄수화물 500~600g, 지방

품질목표 QTPP: 글씨가 잘 쓰였으면 좋겠다

품질목표를 이루기 위한 중요한 요소 CQA: 연필심의 강도, 그립 감 파악

품질목표를 이루기 위한 공정 요소들 CPP: 흑연 가공 시 온도, 직경& 단면 모양

Design Space: 200~210도 사이의 온도, 직경 100mm~150mm, 8각형 이상의 단면

QbD가 전통적 방식과 다른 이점을 보이는 것은 Design space의 확보라고 볼 수 있겠다. 전통적 방식은 공정을 운용할때 매번 같은 조건하에서 의약품을 생산하게 된다. 이 때, 공정 조건을 변화시키게 되면, 재허가를 받아야 할 수 도 있다.

그러나 QbD 방식의 공정은 Design space 내에서 얼마든지 공정조건을 변화할 수 있는 장점을 가진다.

관련 용어들이 많이 어렵고 실제 면접장에서 이에 대해 물어본 사람은 없었지만, 어떻게 제약 바이오 산업이 변화하고 있는지에 대해서는 인지하기 위해 공부하였다.

QbD와 관련된 일을 하기 위해서는 데이터 관리를 할 수 있는 역량도 필요할 것이다.

2. 영상출처, 간단한 FX용어 설명 7.Minitab을 활용한 의약품 설계 기반 품질 고도화 QbD(Quality by Design) , 김강희, LG화학 생명과학본부, Youtube

Jamie의 성장기 Jamie의 성장기

- Concrete Builder : 빌더 인터페이스 구현체. 부품을 합성하는 방식에 따라 여러 구현체를 만든다.

- Director : Builder를 사용해 객체를 생성

- Product : Director가 Builder로 만들어낸 결과물

- return this; : return this를 사용하면, .으로 체이닝을 이어갈 수 있음! (마치 람다의 스트림처럼 보인다)

Factory Method Pattern(팩터리 메서드 패턴)

- 패턴 설명 : 상위 클래스(Abstract Creator)에 알려지지 않은 Concrete Product를 생성하는 패턴, Concrete Creator가 Concrete Product를 결정

- 특징 : Template Method Pattern의 생성 버전

- Abstract Creator : Product Interface에 담길 객체를 생성하는 주체가되는 추상 클래스. Template Method Pattern을 이용하여 create() 등의 Factory Method의 골격을 짜고(Product를 생성하는 메서드), 내용을 abstract method로 생성해둠

- Concrete Creator : Abstract Creator의 추상 메서드를 Concrete Product를 이용할 수 있도록 구현

- Product Interface : Creator에 의해 추가될 객체의 인터페이스

- Concrete Product : Product Interface를 구현한 클래스, Concrete Creator에 의해 구현 예정

Prototype Pattern(프로토타입 패턴)

- 패턴 설명 : 런타임에 또 다른 객체를 생성하는 것. 생성할 객체들의 타입은 Prototype의 인스턴스로부터 결정, 인스턴스는 새 객체를 생성하기 위해 자기 자신을 복제(clone - 깊은 복사), 생성 비용이 비쌀 경우 유용함

- Cloneable : Object의 clone() Method를 사용하는 것을 명시하는 Interface

- Prototype : clone() 선언 및 구현, clone()을 선언하기 위해선 Cloneable을 구현해야 함

- Sub Prototype : Prototype을 상속

- 얕은 복사 : =로 대입해서 넣었을 때, 참조 타입의 경우 동일 주소값을 가져가게 됨

- 깊은 복사 : clone()을 이용하여 가지고 있는 값을 복사, 같은 값이지만 다른 주소값을 가져가게 됨

- 단, clone을 이용하는 경우 객체 내의 기본형만 깊은 복사가 되고, 참조형은 얕은 복사가 되게 되는데 이 부분은 신경써줘야 함

Singleton Pattern(싱글턴 패턴)

- 패턴 설명 : 인스턴스가 프로그램 내에서 오직 하나만 생성되는 것을 보장하고, 프로그램 간단한 FX용어 설명 어디에서든 해당 인스턴스에 접근할 수 있도록 하는 패턴

- Singleton : (사전적 의미) 하나의 개체

- private 생성자 : 외부에서의 객체 생성을 막기 위해 생성자를 private으로 해 둠, 상속 또한 불가능해짐

- SingletonClass.getInstance() : 외부에서 객체를 받아오기 위한 Static 클래스

- Static Class와 Singleton Pattern의 차이 - Singleton Pattern의 경우 처음에 객체 생성을 하지 않고, 필요시 생성할 수 있음

Adapter Pattern(어댑터 패턴)

- 패턴 설명 : Adaptee 클래스의 인터페이스를 사용자가 기대하는 인터페이스로 변환시켜주는 패턴

- Adapter Interface (어댑터 인터페이스) : 사용자가 기대하는 인터페이스

- Concrete Adapter (구현한 어댑터) : Adapter Interface와 Adaptee를 이어주는 부분을 실제 구현한 클래스

- Adaptee(어댑티) : 사용자가 실제로 사용하려는 클래스로, 사용자가 기대하는 인터페이스와 차이가 있음

Bridge Pattern(브릿지 패턴)

- 패턴 설명 : 구현부(Implementor)에서 추상층(Abstraction)을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴

- 특징 : 어댑터 패턴과 흡사함, 하지만 사용 목적의 차이가 있음

- 어댑터 패턴 : 기대하는 인터페이스와 클래스가 다를 경우, 가운데 어댑터를 두어 맞춰주는 것(리팩터링. )

- 브릿지 패턴 : 추상과 구현 분리, 변경해도 서로 영향 없음(확장성 중점)

- Abstraction : 기능 계층의 최상위 클래스. Implementor를 생성자로 받아서 변수로 가지고 있음. Implementor에 위임(Delegation)할 부분을 모두 구현메서드로 가지고 있음. 그 외는 추상 메서드.

- Refined Abstraction : Abstraction를 상속받아 추상메서드를 구현한 클래스.

- Implementor : 구현 클래스를 위한 인터페이스이자 Abstraction의 기능을 구현하기 위한 인터페이스

- Concrete Implementor : Implementor를 구현. 즉, 실제 기능 구현.

Composite Pattern(컴포짓 패턴)

- 패턴 설명 : 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 함

- Component : 모든 표현할 요소들의 추상적인 인터페이스

- Leaf : Component을 구현한 구현 클래스

- Composite : Component를 구현한 구현 클래스. Component들을 변수로 가지고 있음, Component 요소를 관리하기 위한 메서드들을 추가로 가지고 있음 - Leaf와 Composite 모두 관리가 될 것이고 이 부분이 단일 객체와 간단한 FX용어 설명 복합 객체를 모두 동일하게 다루도록 한 것!

Decorator Pattern(데코레이터 패턴)

- 패턴 설명 : 주어진 상황 및 용도에 따라 어떤 객체에 책임(from Decorator)을 덧붙이는 패턴. 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있음

- Component : Concrete Component와 Decorator에서 공통으로 사용될 인터페이스 정의, 클라이언트는 Component를 통해 실제 객체 사용

- Concrete Component : 기본 기능을 구현한 클래스

- Decorator : Concrete Decorator들의 공통 인터페이스를 정의한 추상 클래스. Component를 변수로 가지고 있음 - 생성자에서 받음

- Concrete Decorator : Decorator의 하위 클래스로, Concrete Component에 추가되는 개별적 기능 정의

Facade Pattern(퍼사드 패턴)

- 패턴 설명 : 어떤 소프트웨어의 다른 커다란 코드 부분에 대한 간략화된 인터페이스를 제공하는 객체

- 어댑터 패턴 VS 퍼사드 패턴

- 어댑터 패턴 : 클라이언트가 원하는 인터페이스에 맞춰주는 패턴

- 퍼사드 패턴 : 클라이언트가 사용하기 복잡한 인터페이스를 쉽고 단순하게 만들어주는 패턴

- Facade : Package의 기능을 간략화된 인터페이스를 통해 제공하는 Class

- Package : 소프트웨어 API / 라이브러리의 집합, Facade Class를 통해 접근됨

Flyweight Pattern(플라이웨이트 패턴)

- 패턴 설명 : 동일하거나 유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하여 사용하도록 하여 메모리 사용량을 최소화하는 소프트웨어 디자인 패턴. ex) Java의 쓰레드 풀, 객체 재사용 풀 등. 이미 존재하는 비슷한 종류의 객체를 저장하여 재사용을 시도하고 일치하는 객체가 발견되지 않으면 새로운 객체를 만듦.

- 중복 생성 가능성이 높은 -> 동일한 자원이 자주 사용될 가능성이 매우 높은 구현 객체. 이런 자원은 공통 자원 형태로 관리하고 있다가 요청이 있을 때 제공해 주는 편이 좋음

-자원 생성 비용이 크지만, 사용 빈도가 낮은 구현 객체. 요청이 있을 때 생성해서 제공해주는 것이 좋음

- Flyweight : 관리해야 할 자원에 대한 생성 및 제공을 담당

- Concrete Flyweight : Flyweight 구현 객체

- Flyweight Factory :Concrete Flyweight 객체의 자원 생성을 담당하는 역할. 역할이 크지 않은 경우 Concrete Flyweight 객체 하나로 생성+관리하기도 함(즉, 사용하지 않을 수 있음)

Proxy Pattern(프록시 패턴)

- 패턴 설명 : 실제 객체를 대신하는 프록시 객체를 사용해서 실제 객체의 생성이나 접근 등을 제어할 수 있도록 해주는 패턴. 단, 흐름 제어만 할 뿐, 결과값을 조작/변경해서는 안 됨

- 데코레이터 패턴 vs 프록시 패턴

- 데코레이터 패턴 : 기존 객체의 기능을 확장하는데 초점

- 프록시 패턴 : 실제 객체에 대한 접근을 제어하는데 초점

- Subject : 실제 사용할 클래스 중, 프록시할 기능의 시그니처

- Real Subject : Subject 인터페이스를 구현한 실제 Subject

- Proxy : Subject를 동일하게 구현하여 실제 사용할 클래스(RealSubject)와 동일한 시그니처의 메서드를 가짐. RealSubject를 가리키는 변수를 가짐(조합). RealSubject의 같은 이름을 가진 메서드를 호출 후 그 값을 클라이언트에게 돌려줌, 호출 전/후로 별도의 로직 호출 가능(단, 값을 조작할 순 없음)

행위 패턴

Chain of Responsibility(책임 연쇄 패턴)

- 패턴 설명 : 명령 객체와 일련의 처리 객체를 포함하는 패턴. 각각의 처리 객체는 명령 객체를 처리할 수 있는 연산의 집합이고, 체인 안의 처리 객체가 핸들할 수 없는 명령은 다음 처리 객체로 넘겨짐. 이 작동방식은 새로운 처리 객체부터 체인의 끝까지 다시 반복. 이 패턴은 결합을 느슨하게 하기 위해 고안되었으며 가장 좋은 프로그래밍 사례로 꼽힘

- 각각의 처리 객체에서 처리할 수 있으면 처리하고, 처리할 수 없으면 다음 처리 객체로 넘김, 처리 객체들은 서로 사슬처럼 연결되어 있어 먼저 처리하는 객체에서 처리할 수 없으면 다음에 연결된 처리객체로 명령을 넘김.(링크드 리스트와 비슷)

- Handler : 요청을 수신하고 처리 객체들의 집합에 전달하는 클래스 - 처음에 넘길 실제 클래스만 알고 있음

- Concrete Handler : Handler를 상속, 요청을 처리하는 실제 클래스 - 다음 넘길 실제 클래스를 알고 있음

Command Pattern(커맨드 패턴)

- 패턴 설명 : 요청을 객체의 형태로 캡슐화하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 매서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 하는 패턴.

- Command : 실행 기능에 대한 인터페이스, 실행될 기능을 execute 메서드로 선언.

- Concrete Command : Command 인터페이스(execute)를 구현. Recevier 객체를 가지고 있으며, execute 메서드는 Receiver 객체의 메서드를 호출. Invoker 객체에 전달되어 명령을 실행하게 됨.

- Invoker(발동자) : 기능 실행을 요청하는 호출자 클래스. 필요에 따라 기능 실행에 대한 기록을 남길 수도 있음. 한 Invoker 객체에 다수의 Command 객체가 전달될 수 있음.

- Receiver(수신자) : ConcreteCommand에서 execute 메서드를 구현할 때 필요한 클래스. ConcreteCommand의 기능을 실행하기 위해 사용하는 클래스로, Command 객체에서 호출시 자신에게 정의된 메서드를 수행.

- Client : Invoker 객체와 하나 이상의 Command 객체를 보유. 어느 시점에서 어떤 명령을 수행할지를 결정. 명령을 수행하려면, 클라이언트 객체는 발동자 객체로 커맨드 객체를 전달

Interpreter Pattern(해석자 패턴)

- 패턴 설명 : 문법 규칙을 클래스화 한 구조, 일련의 규칙으로 정의된 언어를 해석하는 패턴

- AbstractExpression : 표현 인터페이스

- TerminalExpression : 주요 해석기(main interpreter)로써 동작하도록 정의

- AndExpression/OrExpression : 복합적(conbinational) 표현을 생성하기 위해 사용

Iterator Pattern(반복자 패턴)

- 패턴 설명 : 객체 지향 프로그래밍에서 반복자를 사용하여 컨테이너를 가로지르며 컨테이너의 요소들에 접근하는 디자인 패턴. 컨테이너로부터 알고리즘을 분리(일부의 경우 알고리즘이 컨테이너에 특화되어 있으므로 분리가 불가). 기반이 되는 표현을 노출시키지 않고 연속적으로 객체 요소에 접근하는 방법을 제공하는 것

- Aggregate : 여러 요소들로 이루어진 집합체

- Concrete Aggregate : Aggregate 인터페이스를 구현

- Iterator : 집합체의 요소들을 순서대로 검색하기 위한 인터페이스

- Concrete Iterator : Iterator 인터페이스를 구현

Mediator Pattern(중재자 패턴)

- 패턴 설명 : 어떻게 객체들의 집합이 상호작용하는지를 함축해놓은 객체를 정의(중재자), 객체 간 통신은 중재자 객체 안에 함축. 객체들은 더 이상 다른 객체와 서로 직접 통신하지 않으며 대신 중재자를 통해 통신 -> 통신 객체 간 의존성을 줄일 수 있으므로 결합도를 감소시킴

- Mediator : 실제 중재자 구현 로직에 대한 인터페이스. 중재자의 서비스를 받기 위한 클라이언트(Colleague)를 등록, 실행하는 간단한 FX용어 설명 API 시그니처가 정의

- Concrete Mediator : Mediator 구현부 구현한 클래스

- Colleague : 중재자에 의해 서비스를 받기 위한 인터페이스

- Concrete Colleague : Colleague 구현부 구현한 클래스

Memento Pattern(메멘토 패턴)

- 패턴 설명 : 객체를 이전 상태로 되돌릴 수 있는 기능을 제공하는 패턴

- 특징 : Memento와 Originator는 같은 패키지에 존재(CareTaker는 다른 패키지) Memento 생성자 및 메서드의 접근제한자는 Protected(CareTaker에서 접근 불가)

- CareTaker : Memento를 관리하는 관리자 역할

- Memento : Originator의 상태를 저장하는 객체

- Originator : 내부 상태를 보유하고 있는 일부 객체

- 진행 ( CareTaker는 Originator 에 대해 무언가를 하지만 변경에 대한 실행 취소를 하기를 원하는 상태)

- CareTaker 는 먼저 Originator 에게 Memento 객체를 요청

- 그 뒤 예정된 일련의 명령을 수행

- 명령 이전의 상태로 되돌리기 위해 Memento 객체를 Originator에 반환

- Memento 객체 자신은 Opaque data type(해당 데이터 타입의 내부 정보가 외부 인터페이스로 모두 노출되지 않은 데이터 타입)

Observer Pattern(관찰자 패턴)

- 패턴 설명 : 객체( Subject) 의 변화를 관찰하는 관찰자( Observer )의 목록을 객체(Subject)에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체(Subject)가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴, 특정 객체에 의존하지 않으면서 상태의 변경을 관련된 객체들에게 통지하는 것이 가능

- Observer : notify 추상 메서드를 정의. notify는 관찰 대상이 발행한 메시지 이외에, 옵서버 자신이 생성한 인자값을 전달할 수도 있음

- Concrete Observer : nofity 메서드를 구현 - 이벤트 발생시 Subject에서 콜백을 받음

- Subject : 관찰 대상인 객체, 이벤트를 발생시키는 주체라는 의미에서 Subject. 1개 이상의 Observer 목록을 가지고 있음, 이벤트 발생시 해당 Observer에게 notify를 줌(notifyObservers). 보통 등록(registerObserver), 제거(unregisterObserver) 메서드가 있음. 그 외에도 작동 중지, 재개 등의 메서드들을 가지고 있을 수도 있음

State Pattern(상태 패턴)

- 패턴 설명 : 객체가 특정 상태에 따라 행위를 달리하는 상황에서, 자신이 직접 상태를 체크하여 상태에 따라 행위를 호출하지 않고, 상태를 객체화 하여 상태가 행동을 할 수 있도록 위임하는 패턴.

- State : 객체의 특정 상태가 할 수 있는 행위 인터페이스

- Concrete State : State를 구현한 특정 상태 구현 클래스

Strategy Pattern(전략 패턴)

- 패턴 설명 : 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고, 동적으로 행위의 수정이 필요한 경우 전략을 바꾸는 것만으로 행위의 간단한 FX용어 설명 수정이 가능하도록 만든 패턴

- Strategy Interface(전략 인터페이스) : 여러가지 관련 알고리즘을 하나로 추상화하여, 도출한 인터페이스

- Concrete Strategy(구현한 전략) : 여러가지 관련 알고리즘을 각각 구현한 클래스들

- Delegate(위임) : 구현 해야하는 기능을 구현된 다른 클래스에게 맡겨서, 마치 내가 구현한 것처럼 기능을 실행하는 것을 지칭

Template Method Pattern(템플릿 메서드 패턴)

- 패턴 설명 : 알고리즘의 뼈대를 정의하는 행위 디자인 패턴. Template Method를 구현해두고, 해당 구조의 상세 기능(메서드)는 구현 클래스에서 구현함. 구현하려는 알고리즘이 일정한 프로세스를 가지고 있고, 알고리즘 구현 내용이 달라질 수 있을 경우 사용

- Template Method : 알고리즘의 뼈대를 정의하고 있는 구현 메서드. 뼈대를 추상 메서드로 구현해두고 있음

- Abstract Class : 알고리즘의 뼈대, 즉 Template Method를 정의. 상세 기능(구조)는 추상 메서드로 정의해둠

- Concrete Class : Abstract Class에서 구현하지 않은 상세 기능을 구현. Template Method는 오버라이딩하지 않음

Visitor Pattern(방문자 패턴)

- 패턴 설명 : 알고리즘을 객체 구조에서 분리시키는 디자인 패턴. 이렇게 분리를 하면 구조를 수정하지 않고도 실질적으로 새로운 동작을 기존의 객체 구조에 추가할 수 있게 된다. 개방-폐쇄 원칙을 적용하는 방법의 하나.

- 사용시 ConcreteVisitable.accept(new ConcreteVisiotr); 같은 느낌으로 호출하면, concreteVisitable의

- 특징 : composite 패턴과 조금 유사함

- Visitor Interface : Visitable을 방문 - visit(Visitable), Concrete Visitable을 해당 Interface나 구현한 Concrete Visitor가 알아야, 다른 행동을 해줄 수 있는 듯

- Concrete Visitor : Visitor Interface 구현 - 알고리즘. 새로운 동작!

- Visitable Interface : Visitor를 받아줌 - accept(Visitor)

- Concrete Visitable : Visitable Interface 구현, 보통 Visitor 클래스에 자기 자신을 던져줌 (visitor.visit(this)) - 위임

ai-creator

이번 장에서는 파이썬으로 게임 만들기를 해볼게요.. 파이썬으로 게임을 만드는 대표적인 방법은 PyGame 라이브러리를 활용합니다.

PyGame을 활용하면 슈팅, 시뮬레이션, 아케이드 등의 다양한 장르의 게임을 비교적 간단히 만들 수 있습니다.

1) 게임을 구상하기 위한 기본기를 배우고

2) 게임 화면에서 상,하 바향키를 눌러 비행기를 움직이는 간단한 게임

을 만들어 보도록 하겠습니다.

비행기 움직이기

2. 사전 준비

라이브러리와 소스 코드입니다.

Pygame Front Page — pygame v2.0.1.dev1 documentation

이번장에서 공부하게 되는 게임 기본기의 전체 소스코드 입니다.

4. 사전 지식

먼저 여러분들이 이제까지 했던 게임들이 있죠?

그 게임들을 머리속에 떠오르면서, 내가 그 게임을 만든다면 어떤게 필요할까? 를 생각해보세요.

저는 애니팡을 정말 좋아했었는데요,

- 손가락으로 동물들의 위치를 맞추면

- 3개 이상의 동물이 맞춰지면, 점수가 올라가는

[그림 1] 예시 - 애니팡

그럼, 대충 어떤게 필요할까요?

- 동일 동물이 3개 이상되는지 계산해야겠죠?

그리고 게임은 위의 것들이 반복적으로 이루어집니다.

- 내가 게임을 그만두고 싶을때

- 일정 점수가 되어 다음 단계로 넘어갈 때

이런 것들이 게임을 이루는 요소들이 되겠지요.

게임 코딩을 위해서 아래와 같은 사전 지식이 필요합니다.

1) PyGame 기본 구조

PyGame은 멀티미디어 소프트웨어를 위한 파이썬 라이브러리입니다. SDL(Simple DirectMedia Layer) 라이브러리를 기반으로 만들어져 있으며, 조이스틱의 입력, 그래픽 처리, 사운드 재생 등의 게임 구성에 필요한 기능을 가지고 있습니다. 말이 어렵죠? 그냥 파이썬으로 게임을 만들기 위해 필요한 것들을 사용하기 편하게 만들어 놓은 라이브러리라고 정리하죠.

게임을 만들기 위한 PyGame의 기본 구조는 다음과 같습니다.

[그림 2] pygame 기본 구조

첫째로 pygame라이브러리를 사용하므로, 사용하겠다!를 선언합니다.

세번째로 게임에 필요한 전역변수를 선언합니다.

마지막으로는 게임 루프를 코딩 합니다.

2) 게임 루프

게임을 진행하기 위해서는 '게임'과 '사용자'간의 지속적인 상호 작용을 합니다. 어떤 상호작용 일까요?

> '게임'은 지속적으로 상태를 화면에 표시하고

> '사용자'는 키보드, 마우스와 같은 입력장치로 입력

이런 '지속적인' 상호작용을 위해서 프로그램에서는 어떤게 필요한가요? 그렇죠, 무한 루프입니다.

이 과정에서 게임의 상태 표시, 사용자의 입력은 게임의 시작부터 끝까지 지속적으로 반복하게 되며 이를 '게임 루프'라고 할 수 있습니다. 게임 루프에는 반복적으로 수행하는 3가지 구성요소가 있습니다.

[그림 3] 게임 루프

1. 사용자 입력처리 : 입력장치를 통해 사용자의 명령을 처리

2. 게임 상태 업데이트 : 게임에서 활용되는 간단한 FX용어 설명 상태(ex, 체력, 적과 캐릭터의 위치, 충돌 여부 등)를 지속적으로 갱신

3. 게임 상태 표시 : 위에서 지속되는 상태를 화면에 표시

3) 게임판 구성

이번에는 '게임판'이 필요합니다. 게임판은 게임을 하는 공간입니다. 쉽게 말하면, 바둑판, 체스판 같은거죠.

pygame을 통해서 게임판을 구성하기 위해서는 두가지가 필요합니다.

- 배경은 '색(RGB)' 혹은 '이미지'를 통해서 구성할 수 있으며,

- 크기는 그 게임판이 가용될 면적을 의미하고 '넓이(width)'와 '높이(heigth)'로 지정합니다.

[그림 4] 체스에 사용되는 게임판(출처 - Pixabay)

4) 이벤트 처리

게임판에 대한 이해도 끝났으니, 이제 실제로 게임을 구현하는 일만 남았습니다. 게임을 구현하는데 있어 게임판 다음으로 중요한 것이벤트 처리입니다.

컴퓨터 세상에서 말하는 '이벤트'와 일상 생활에서 말하는 '이벤트'는 의미가 좀 다릅니다.

컴퓨터 세상에서 말하는 이벤트는 이런거에요.

컴퓨팅에서 이벤트(event)란 프로그램에 의해 감지되고 처리될 수 있는 동작이나 사건을 말한다. 대체로 이벤트는 프로그램 동작 과정과 함께 동시에 처리되도록 되어 있다. 즉 프로그램은 이벤트를 처리하기 위한 하나 이상의 전용 공간(또는 핸들러)를 가지게 되는데, 보통의 경우 이벤트 루프라고 불리는 곳에서 이를 처리하게 된다. 사용자가 키보드의 키를 누르는 것이 가장 대표적인 이벤트 발생 중의 하나이며, 타이머와 같은 하드웨어 장치가 이벤트를 발생 시키기도 한다. 또한 모든 프로그램은 작업이 완료되었다는 사실 등을 알리기 위해 자체적으로 정의한 이벤트를 발생시킬 수도 있다. 컴퓨터 프로그램 중에서 특히 이벤트에 반응하여 동작을 변경하는 방식을 이벤트 드리븐(event-driven) 방식이라고 하는데, 이는 보통 대화형 프로그램을 만드는데 그 목적이 있다. - 출처 : 위키백과 -

쉽게 말하면, 컴퓨터 입장에서 '처리해야 하는' 동작을 의미하는 거죠. 애니팡에서 손가락이 움직이는 방향에 맞춰, 동물을 움직이는 것을 생각하면 됩니다.

앞서 설명한 게임 루프에 사용자 입력 처리, 상태 업데이트, 상태 표시의 과정이 있었죠?

상태 업데이트에서는 사용자의 입력에 따라 상태가 변할 수 도 있으며, 사용자의 입력이 없다고 하더라도 시간 초과 등의 게임 룰에 의해 업데이트 될 수 있습니다.

따라서 사용자의 입력 처리부터 상태 업데이트, 상태 표시까지 이어주는 '흐름'을 만드는 것이벤트 처리 이며, 모든 이벤트 처리는 특정 조건(=동작)에 의해 발생되도록 정의됩니다.

이 정도의 기본기면 충분합니다. 이제 게임을 만들어보겠습니다.

5. 구현 순서

이제 파이썬과 pygame을 사용해서 게임을 만들어볼게요.

앞서 설명드린 기본 구조를 바탕으로 작성을 할 것이며, 게임판을 설정하고 게임 흐름을 만드는 이벤트 처리까지도 생성하는 순으로 진행하겠습니다.

이를 통해 간단하게 비행기를 배치하여 이벤트 처리까지 생성하도록 하겠습니다.

Step1 기본 구조 작성 및 게임판 설정
Step2 이벤트 생성 1 - 이벤트 처리
Step3 이벤트 생성 2 - 비행기 움직이기

Step1) 기본 구조 작성

[그림 2]의 게임 기본 구조에 해당하는 소스를 먼저 작성해보도록 하겠습니다.

pygame 기본 구조

1~3번 라인은 앞서 작성된 1,2번 순서대로 pygame 선언과 pygame 초기화에 해당하는 코드가 작성되어 있습니다.

6~9번 라인은 게임판 설정입니다. 게임판 구성요소는 2가지라고 말씀드렸죠. 바로 '배경'과 '크기'입니다.

이번 게임에서는 '배경'은 흰색으로, '크기'는 넓이(width) 400, 높이(height) 300로 설정해보겠습니다. 흰색을 표현할때는 RGB 값을 이용합니다. 즉, 색을 표현하는 방법은 여러가지가 있는데요, 그 중 RGB 색상표로 색을 표현하는 것입니다.

이렇게 3가지를 적절한 비율로 섞어 색을 표현합니다.

333333 R - 051 G - 051 B - 051

흰색은 R = 255, G=255, B=255 네요.

6라인 WHITE = ( 255 , 255 , 255 ) 이렇게 튜플형태로 만들어주고,

18라인 에서 screen.fill(WHITE) 색을 채워줍니다. 만약, 파란색으로 하고 싶다면? (0, 0, 255)로 설정하면 되겠죠.

그럼 screen이라는 객체는 어떻게 만들어진걸까요? 7라인에 넓이(width) 400, 높이(height) 300으로 설정하고, 8라인을 통해 screen객체가 생성되었습니다. 이렇게 게임판을 구성하였습니다.

10,11번 라인은 게임의 종료를 확인할 done 변수와 FPS(Frame Per Second, 초당 화면 출력) 을 설정하는 변수입니다. FPS라는 개념이 생소하시죠? 화면(frame)을 얼마나 자주 그려줄 것이냐의 의미로 생각하면 됩니다.

FSP 설명 (출처 : https://securitycamcenter.com/frame-rate-cctv/)

1초에 화면을 12번 그려준다고 하면 12fps 라고 하고, 3번을 그려준다고 하면 3fps라고 하는거죠. 컴퓨터 입장에서는 드문드문 그려줘야 좋겠죠. 그러나, 사용자 입장에서는 자주 그려줘야 부드럽고, 생동감 있게 느껴집니다.

FSP 설명 (출처 : https://theappliancesreviews.com/why-frame-rate-is-25-30-or-29-97-fps/)

11라인에서는 객체를 선언한 것뿐이고, 17라인에서 설정을 해줍니다. clock.tick( 10 )로 설정함으로써 1초에 10번 화면을 출력해준다는 의미입니다. 즉, 10fps로 설정되었습니다. 적절하게 쉬는 시간을 주어 컴퓨터 입장에서는 과부하되는 것을 막아줍니다.

14~17번 라인은 게임이 실행되는 함수 입니다. 15번 라인부터 while문을 통해 무한 루프가 지속되며 게임 루프를 실행하게 됩니다.

15번 라인은 게임 종료를 검증하기 위한 done 변수를 전지역(global scope)에서 사용 할 수 있도록 global이라는 키워드를 사용합니다.

16번 라인은 실제 사용될 FPS를 설정해주는 라인입니다. 값을 10으로 지정한 것은 초당 10번의 화면을 출력 해준다는 의미입니다. 해당 값이 높아질 수록 CPU에 사용량이 높아지며 프레임에 따라 모니터가 제대로 출력하지 못하는 경우가 많아 기본적으로 10, 30, 60을 많이 사용합니다.

Step2) 이벤트 생성 1 - 종료 처리

게임 기본 구조를 작성하였으니 이제는 이벤트 처리를 구현해볼께요.

step1)에 구현된 내용은 절대 종료되지 않는 프로그램라고 말씀드렸죠? 그럼, 해당 코드에서 어떻게 되어야 프로그램이 종료되나요? while문을 보면 어떤 조건일 때, 빠져나오죠? 맞습니다. done 변수가 True가 되면 프로그램이 종료됩니다.


0 개 댓글

답장을 남겨주세요