프로그래밍
프로그래머들이 프로그래밍 언어로 프로그램 코드를 작성하는 행위입니다. 게임 역시 컴퓨터 프로그램이기 때문에 프로그래밍으로 만들어집니다. 현재는 "객체 지향적"페러다임을 따르는 프로그래밍 언어가 가장 많이 쓰이고 있습니다. 제가 아는 한, 게임 업계에서만큼은 그렇습니다.
객체 지향 프로그래밍?
"객체 지향적"(Object Oriented)이라는 개념을 어떻게 쉽게 설명해야 할지 자신은 없습니다만, 상투적인 설명으로는, 수 많은 "객체"들끼리 소통하듯 프로그램을 설계하고 코드를 작성하는 방식입니다.
음... 뭔가 좀 부족하군요. 직역을 통해 설명을 보충해봅니다. Object Oriented Programming. 여기서 Oriented 를 "지향적"이라고 직역해서 부르고 있는데요, "미래 지향", "목표 지향"이란 단어는 많이 봤어도, 객체를 지향한다고 하니 선뜻 의미가 와닿진 않습니다. 영단어는 의미가 모호할 땐 내포하는 모든 뜻을 연결지어서 생각하면 좀 더 쉽더군요.
지향하다는 것은 "~을 목표로 뜻, 생각을 향한다"는 의미를 갖습니다. 영어로는 "~위주의", "~에 중점을 둔"이라는 접미사로도 쓰는군요.
저는 개인적으로 "...위주의", "...에 중점을 둔." 이 뜻이 좀 더 한글로는 직관적이지 않나 싶은 생각도 드는군요. "객체 위주의 프로그래밍". 개인적으론 "객체 지향 프로그래밍"보다는 좀 덜 낯선 느낌입니다. 위 사전뜻을 기반으로 OOP 를 한국어로 재해석 한다면 이런 느낌입니다.
"객체 위주로 프로그래밍 한다."
"객체를 목표로 생각해서 프로그래밍 한다."
"객체에 중점을 두고 프로그래밍 한다."
이렇게 적고보니 더욱 확실하게 "객체 지향 프로그래밍"이란 용어보다는 더 직관적인 것 같습니다.
이 "객체 지향 프로그래밍"을 더 잘 이해하려면, 등장 배경이자 이전 세대인 "절차지향적 프로그래밍"페러다임의 단점을 어떻게 해결했는지를 보면 좋습니다. 사실 의미적으로 절차적이지 않은 프로그래밍은 없기 때문에, 절차지향 프로그래밍은, 간단하게, 객체라는 개념이 등장하기 전의 프로그래밍 페러다임으로 보는 것도 괜찮지 않나 싶네요.
예를 들면 이렇습니다.
// 절차적 프로그래밍 예 배경 1 스크롤 처리 배경 2 스크롤 처리 배경 오브젝트들 스크롤 처리 캐릭터 입력 처리 캐릭터 이동 처리 캐릭터 충돌 처리 NPC 스폰 처리 NPC AI 처리 NPC 충돌 처리 등등등 처리 // 객체 지향적 프로그래밍 예 [배경 객체] 처리 (내부는 몰라도 됨) [캐릭터 객체] 처리 (내부는 몰라도 됨) [NPC 객체] 처리 (내부는 몰라도 됨) [등등등 객체] 처리 (내부는 몰라도 됨)
절차적 프로그래밍은 코드가 함수콜의 순서로 직관적인 반면 코드 리뷰의 복잡도가 계속해서 증가할 수 있고, 객체 지향적 프로그래밍은 절차가 추상적으로 보일 순 있지만 리뷰해야할 코드가 짧아지고 객체들에게 일을 시키는 모습으로 의도가 직관적입니다.
객체들을 생성하는 코드가 추가되기 때문에 전체 코드의 양은 조금 더 많아지지만, 코드를 수정하거나 추가하려는 프로그래머가 리뷰해야 할 코드의 양은 크게 줄어듭니다. 객체의 "(내부는 몰라도 됨)"이 OOP 의 특징이자 개념 중 하나이기도 합니다.
요즘 OOP 설계와 프로그램 디자인에 대한 생각도 많아지고, 이와 관련해서 회사에서 프로그래밍 관련으로 논쟁하는 일도 많아졌는데, 그 시작으로 OOP 에 대한 개념을 한 번 짚어봤습니다. 다음은 OOP 설계 원칙에 대해 다뤄보도록 하겠습니다.
관련 링크
객체 지향 프로그래밍 - 위키백과
'프로그래밍 이야기' 카테고리의 다른 글
A Tour of C++ : 옮긴이의 말 (0) | 2019.10.06 |
---|---|
Google Apps Script 제한(Limit) 내용 정리 (0) | 2019.08.16 |
프로그래밍, 구현이 더 중요? 설계가 더 중요? (0) | 2019.05.20 |
프로그래밍, OOP 설계 원칙 SOLID (0) | 2019.04.30 |
파이썬(Python), 가지고 놀기 첫걸음 (0) | 2019.04.24 |
게임 프로그래밍을 잘 하면 팀에서 가장 이득을 보는 사람은? (0) | 2019.04.16 |
(게임)프로그래밍 카테고리 신설 (0) | 2019.04.10 |