의사코드(pseudo-code)란?

Sujin Lee
Django Girls Seoul | 장고걸스서울
8 min readOct 25, 2016

의사코드(pseudo-code)란 무엇인가요?

의사(疑似: 비교할 의, 비슷할 사 | Pseudo: 가짜의- ) 코드는 컴퓨터 프로그램이나 알고리즘이 수행해야할 내용을 우리가 사용하는 언어 (한국어 또는 영어 등)로 간략히 서술해 놓은 것을 말합니다. 왜 의사코드를 사용해야 하나요?

  • 의사코드는 코딩 입력을 시작하기 전, 사고를 좀더 명확히 정립하게 만들어주어 프로그램을 설계하는데 도움이 됩니다. 실제 코드 입력을 처음 시작할 때가 제일 힘듭니다! 단순히 소스코드를 입력하는 것보다 함수(function) 프로그램을 만들 때 많은 시간을 낭비할 수 있습니다. 약 10분 정도 각 풀이법의 장점과 단점을 주도면밀하게 살펴보면서 의사코드 작성한다면, 이후 디버그를 수정하고 코드를 재분해 하는데 걸리는 시간을 단축할 수 있습니다.
‘의사코드 없이 프로그램 작성 할 때’ vs ‘의사코드 사용하면서 프로그램 작성할 때’
  • 의사코드로 코드 검토(Code Review)가 더 쉬워집니다. 의사코드로 소스코드 실행없이 상세 설계를 검토할 수 있습니다. 의사코드는 하위 설계 단계의 프로그램을 쉽게 검토할 수 있어 작성된 프로그램의 검토 시간을 줄일 수 있습니다. 의사코드는 지속적인 프로그램 개선에 큰 도움이 됩니다. 상위 설계 프로그램에서 시작하여 의사코드를 수정한 후에 수정된 의사코드를 가지고 소스코드를 개선하게 됩니다. 각 단계 별로 반복적인 프로그래밍 개선을 통해 하위 설계 단계의 프로그램을 체크할 수 있습니다. 이 결과로 상세 작업 단계에서 큰 오류를 발생시키거나 작업에 큰 악영향을 주기 이전에, 상위 단계의 프로그램의 오류는 상위 단계에서, 중간 단계의 오류는 중단 단계에서 하위 단계의 오류는 하위단계에서 검토할 수 있게 됩니다.
  • 의사코드는 코드 수정을 좀더 용이하게 만들어줍니다. 일부 의사코드 몇 줄을 수정하는 것은 한 페이지 전체의 코드를 수정하는 것보다 더 쉽습니다. 벽지 전체에 새로운 페인트를 바르는 것이 쉬울까요? 아니면 얼룩진 일부분에만 페인트를 덧칠하는 것이 더 쉬울까요? 물론 이 방법은 소프트웨어에 큰 물리적인 변화를 주는 것은 아니지만, 수정이 거의 필요하지 않는 제품을 개선할 경우에 사용되는 일반적인 방법입니다. 성공적인 프로젝트를 만들기 위해서는 최소한의 노력으로 고칠 수 있는 단계(least-value stage)에서 오류를 바로 잡는 것이 매우 중요합니다. 나중에 코드입력, 테스트, 디버그 수정 단계에서 작업하는 것보다 의사코드 설계 단계에서 미리 오류를 수정을 하는 것이 훨씬 경제적입니다.
  • 의사코드는 코멘트(Comment) 작성에 대한 부담을 덜어줍니다. 학생들은 보통 코드를 작성한 이후에 코드에 대한 부가적인 설명내용을 작성합니다. 의사코드를 사용할 경우 의사코드 서술 내용 자체가 코멘트가 되기 때문에 사실상 안에 코멘트를 남겨놓는 것보다 코멘트를 지우는데 더 많은 시간이 걸립니다. 의사코드는 다른프로그래밍 설계 문서보다 유지보수가 쉽습니다. 코드와 분리된 채로 설계문서를 작성한다면, 어떤 부분에 수정변동이 있게 되어 양쪽 모두 일관성이 없어지게 됩니다. 의사코드는 코드 안에 작성됩니다. 때문에 코멘트가 계속 추가되면서 의사코드 설계 작성이 정교해질 수 있습니다. 1

의사코드를 효과적으로 작성하는 방법은 무엇인가요?

  • 잘 쓰여진 의사코드에 따라 좋은 코드가 짜여집니다. 의사코드와 코드 모두 같은 스타일로 일관성있게 작성해야합니다. 똑같은 연산 기호를 사용하며, 적절한 곳에, 이해될 수 있는 문장으로 작성해야합니다. (긴 문장을 쓰지 않아도 됩니다.)
  • 불필요한 내용은 무시합니다. 콤마(,)의 위치를 고민할 필요가 없습니다. 좋은 방법은 ‘시작/끝(begin/end)’ ‘,’ 등과 같이 일반적으로 많이 쓰이는 구조적인 기호나 단어들을 적절한 곳에 사용하는 것입니다. 그러나 어법이나 구문에 크게 주의하지 않아도 됩니다.
  • 확실한 내용을 여러번 말하지 않습니다. 문맥에 따라 값의 유형이 정해질 경우가 종종 있습니다. 예를들어 값이 정수인지 실수인지 정하는 것이 중요한 문제가 아니라면, 정확하게 값을 구분하는 것이 필요 없을 수도 있습니다.
  • 프로그래밍에 쓰이는 문법(구문)을 이용해 작성합니다. if/else 조건문, 반복문(loop)인 while은 영어 단어와 같기 때문에, 이를 사용하여 의사코드를 좀더 명확하게 작성할 수 있습니다. 적은 수의 단어를 조합하여 의사코드를 작성하는 것도 좋은 방법입니다. 변수 사용은 의사코드를 간단명료하게 만들어주기 때문에 생략하지말아야 합니다.
  • 사용할 목적과 상황에 주의하여 작성합니다. 만약 빠른 정렬(quick sort) 알고리즘을 쓰고자 할 때, 단순히 ‘quick sort’라고 의사코드를 작성하게 되면 상세한 내용을 생략이 된 것입니다. 만약 여러분중 quick sort에 익숙하여 추후 서브루틴으로써 반복해서 사용할 수 있는 부분적 프로그램으로 만들고 싶다면, ‘quick sort”이라 쓰는데 문제가 없습니다. 기본적인 형식을 지킵니다. 의사코드로 알고리즘 전체를 한번에 꿰뚫어볼 수 있어야 합니다. 그렇지 않다면 알고리즘을 쉽게 분석하기가 어려워집니다.
  • 수준을 고려해 작성합니다. 만약 다른 사람이 본인이 작성한 의사코드가 이해하기 너무 어려워 실제 코드로 옮기기 어렵다면(또는 둘다 모두일 경우) , 선택한 난이도에 문제가 있다는 뜻입니다. 2

일반적으로 많이 쓰이는 의사코드 영어 단어

Input: READ, OBTAIN, GET Output: PRINT, DISPLAY, SHOW
Compute: COMPUTE, CALCULATE, DETERMINE
Initialize: SET, INIT
Add one: INCREMENT, BUMP
SEQUENCE is a linear progression where one task is performed sequentially after another.WHILE is a loop (repetition) with a simple conditional test at its beginning. IF-THEN-ELSE is a decision (selection) in which a choice is made between two alternative courses of action. REPEAT-UNTIL is a loop with a simple conditional test at the bottom.CASE is a multiway branch (decision) based on the value of an expression. CASE is a generalization of IF-THEN-ELSE.FOR is a "counting" loop.TRUE / FALSE REPEAT - UNTIL RETURN BEGIN / EXCEPTION / END

의사코드를 실제로 작성해봅시다.

예 1. 판매세가 포함된 물건 값 계산하기
1. get price of item \\ 물건 값 투입하기
2. get sales tax rate \\ 세금 할인율 투입하기
3. sales tax = price of item times sales tax rate \\ 판매세 = 물건 값 * 세금율
4. final price = price of item plus sales tax \\ 총합 = 총합 + 판매세
5. display final price \\ 총합 표시하기
6. halt \\\\ 종료

의사코드를 작성할 때, 연산은 연산기호와 숫자를 사용하여 씁니다. 의사코드에 쓰인 값을 리스트로 따로 정리합니다. 위 문제에 쓰이는 리스트 값을 ‘Variables: price of item, sales tax rate, sales tax, final price’로 정리해볼 수 있습니다. 이러한 작업은 의사코드를 실제 프로그래밍 작업으로 옮길 때 유용합니다. 이제 이 의사코드를 가지고 실제 Python 코드로 옮겨볼 차례입니다. 의사코드 바로 밑 줄 아래에 실제 코드를 작성하면 됩니다.

def compute_salestax():
# get price of item
price = float(raw_input("What is the item's price?")
# get sales tax rate
tax_rate = float(raw_input(\"Enter the sales tax rate, in decimal: ")
# sales tax = price of item times sales tax rate
tax = price * tax_rate
# final price = price of item plus sales tax
final_price = price + tax
# display final price
print("The final price is:", final_price)
# halt return

--

--