1. 개요
의사코드(pseudocode)란 특정 언어에 구애되지 않는 방식으로 프로그램의 논리나 알고리즘을 표현하는 수단입니다. 의사코드에 대한 일반적인 '한글' 어휘나 표기 관례를 만들어 둔다면 함께 일하는 프로그래머들 사이의 의사소통에 도움이 될 것이구요. 또 자신의 기법을 다른 사람들과 공유하는데에도 많은 도움이 될 것입니다.
아마도 어느 정도 규모가 있는 개발사라면 이와 비슷한 개념의 규약 같은 것이 존재할 지도 모르겠습니다. 실제 현장에서의 경험과 자료를 가지고 계신 분이 도와주시면 정말 좋겠습니다~
2. 프로그램 설계 언어(Program Design Language, PDL)의 개념
참고자료 : http://www.gamedev.net/reference/programming/features/pdl/default.asp
PDL은 그 자체로 컴파일되는 실제 프로그래밍 언어가 아니라, 프로그램을 설계하고 서술하기 위한 언어입니다. 즉 PDL은 기본적으로 사람을 위한 것입니다.. 컴퓨터를 위한 것이 아니죠.. 흔히 말하는 의사코드(pseudocode)가 바로 PDL이라고 해도 틀리지 않을 것입니다.
컴퓨터 프로그래밍 언어는 인간의 일상 언어(구체적으로는 영어)와 점점 더 닮아가고 있지만, 여전히 격차는 존재합니다. 인간이 가장 이해하기 쉬운 언어는 물론 자신이 사용하는 일상 언어입니다.. 그리고 특정 영역에서는 영어와 거의 흡사한 프로그래밍 언어가 쓰이고 있습니다. 예를 들어서 SQL에서는 DELETE name FROM table1 처럼 영어 문장과 거의 흡사한 표현이 가능하며, MS SQL Server 2000의 경우에는 What Item has the highest price? 같은 문장을 받아서 가격이 가장 비싼 항목을 돌려주는 기능도 있더군요...
물론 가장 많이 쓰이는 C++에서는 그런 것이 불가능합니다.. 다만, 의사코드를 사용함으로써
- 코드의 논리와 구조를 미리 한 번 더 생각할 수 있으며,
- 코드가 뜻하는 바를 다른 사람에게 좀 더 명확하게 전달할 수 있고,
- 또한 그 자체가 코드의 문서화 수단이 될 수 있습니다.
예를 들어서 이런 의사코드가 있다고 할 때..
만일 A가 B 보다 크면 A를 하나 감소시킨다. 그렇지 않으면 B를 하나 감소시킨다. 만일 끝
코드를 작성하기 전에 미리 이런 의사코드를 작성함으로서 코드의 논리를 한 번 더 생각할 수 있구요. 또 상사에게 검사(code review)받기도 편합니다("이봐 둘이 같을 때에도 B를 감소시키는 건가?" 같은 질문이 금방 나오겠죠..) . 복잡한 코드를 주고 검사해 달라고 하면... 싫어할지도 모르죠.. 시간도 더 걸리고.... 게다가! 특정 프로그래밍 언어는 잘 모르지만 프로그래밍 자체는 잘 아는 사람이 있습니다.. 그런 사람이 어딜 가도 제몫을 하는 진짜 고수죠.. 그런 사람이라면 의사코드가 더 편할 것입니다.
그리고 의사코드 자체를 주석으로 만들면 그대로 문서화가 되기도 하죠...
//만일 A가 B 보다 크면 if (varA > varB) { --varA; //A를 하나 감소시킨다. } //그렇지 않으면 else { --varB; //B를 하나 감소시킨다. } //만일 끝
3. 한글 의사코드의 어휘
의사코드를 영어로 써야 한다면 그 자체가 스트레스가 될 것입니다... 물론 영어 공부에는 좋겠지만요...
그렇다고 개개인마다 완전히 자유로운 한글 문장을 사용하는 것도 문제가 있습니다... 오해의 소지도 있을 것이고... 의사코드에서 실제 코드로 넘어가기도 힘들테니까요..
팀 또는 회사의 모든 개발자들이 일관되게 지켜나갈 어느 정도의 규칙과 지침, 어휘가 필요하리라고 생각합니다...
여기서부터, 의사코드에 사용할 한글 어휘, 관례, 지침 같은 것들을 만들었으면 좋겠습니다.(의사코드는 특정 프로그래밍 언어에 국한되는 것이 아니지만... 그래도 가장 많이 쓰는 C++을 염두에 두는 게 초기 작업을 진행하기에 편할 것 같습니다).
3.1 일반적인 지침
- 일상 언어와 최대한 가깝게 한다.
- 문장 부호는 문장 자체를 위해서만 사용하고, 코드의 구조를 표기하기 위해 사용하는 것(괄호, 중괄호 등)은 피한다.
3.2 실행 명령문(배정문, 함수 호출 등)
하나의 동작은 하나의 문장으로 - 예를 들어
X 좌표를 1 증가하고 Y 좌표를 1 감소한다.
보다는
X 좌표를 1 증가한다. Y 좌표를 1 감소한다.
3.3 제어구조
조건문
if - 만일, (이하 쉼표, 마침표 포함..)
else - 그렇지 않으면,
else if - 그렇지 않고 만일,
조건문의 끝: 만일 끝.
예:
만일, 벽에 부딪혔으면 뒤로 돈다 그렇지 않고 만일, 바로 앞에 낭떠러지가 있으면 뒤로 돈다. 만일 끝. 그렇지 않으면, 계속 간다. 만일 끝.
반복문
각 반복에서 실행될 부분은 들여쓰기를 한다.
각각의 ~에 대해 - 이것은 흔히 볼 수 있는 for each 숙어에 대응하는 것이다.
예: 목록의 모든 원소들에 1을 더한다고 하면...
목록의 각각의 원소에 대해
원소에 1을 더한다
반복 끝
다음을 (조건)~까지 반복 - 흔히 볼 수 있는 while 에 대응
다음을 현재 노드에서부터 마지막 노드까지 반복
현재 노드가 가리키는 스프라이트를 출력
다음 노드를 선택
반복 끝
다음을 (n) 번 반복 - 단순한 for 문에 대응
다음을 10 번 반복
타격음을 재생한다.
반복 끝