의사 코드란?
용어 1
자연어를 사용하여 플랫폼에 무관하고 심층적인 코드에 대해 설명한 것을 의사 코드pseudo code라 한다.
설명
의사 코드는 말 그대로 코드인 것 같지만 실제로는 코드가 아닌 표현으로써, 특정한 프로그램 언어에 구애받지 않고 알고리즘을 설명하기 위해 사용된다. 수도 코드는 자연어는 물론 수식을 사용해도 좋으며, 그 정의가 명확하고 전달력에 문제만 없다면 특정 언어의 문법을 차용해도 무방하다.
그 알고리즘을 어떻게 구현하는지는 프로그래머의 스타일이나 여러가지 제약 조건에 따라 천차만별로 달라질 수 있지만, 의사 코드는 가장 근본적으로 작동되는 알고리즘의 원형으로써 존재해야 한다.
아이러니한 것은 의사 코드가 ‘알고리즘의 원형’이라는 설명이 무색하게도 의사 코드 작성법 자체에도 여러가지 스타일이 있을 수 있다는 것이다. 예로써 선택 정렬을 설명하는 두가지 스타일의 의사 코드를 보려고 한다. 어떤 스타일로 구현하든 상관은 없지만, 근본적으로는 최소값을 반복적으로 구함으로써 정렬을 수행한다.
알고리즘: 선택정렬 1 | ||
---|---|---|
In | 길이가 인 배열 | |
1. | for do | |
2. | ||
3. | # 자리 교체 | |
4. | end for | |
Out | 오름차순으로 정렬된 배열 |
포트란이나 C, 매트랩처럼 절차지향성이 강한 스타일이다. 반복문이나 조건문 등의 블럭을 end와 같은 명시적인 키워드로 닫아주는 경우가 많으며, 배열 단위부터 정직하게 접근해서 읽기가 편하다.
알고리즘: 선택정렬 2 | ||
---|---|---|
In | 길이가 인 배열 | |
1. | # 빈 배열 초기화 | |
2. | while | |
3. | ||
4. | ||
Out | 오름차순으로 정렬된 배열 |
파이썬처럼 객체지향성이 강한 스타일이다. 문법도 파이썬을 본따서 인덴트indent로 블럭을 구분하는 경우가 많으며, 해당 논문이나 교재를 읽고 있다면 상식적으로 알법한 자료구조가 갑자기 등장할 수 있다. 아무래도 인덱스를 하나하나 따져가면서 읽는 것보다 개념적으로 이해하기 쉽다는 장점이 있다.
A. Alhefdhi, H. K. Dam, H. Hata and A. Ghose, “Generating Pseudo-Code from Source Code Using Deep Learning,” 2018 25th Australasian Software Engineering Conference (ASWEC), Adelaide, SA, Australia, 2018, pp. 21-25, https://doi.org/10.1109/ASWEC.2018.00011 ↩︎