의사코드(psedocode)
의사코드는 간단히 말해 프로그래밍 언어로 코드를 작성하기전에 우리가 쓰는 일상 언어로 프로그램이 작동하는 논리를 먼저 작성하는 것을 말한다. 의사코드를 작성하기 전, 문제를 이해하고 논리 문제를 풀듯이 풀 수 있어야 한다. 그 이후, 컴퓨팅 사고로 전환하여 의사코드를 작성하고 개발 언어로 코드를 작성한다.
의사코드의 장점
1. 시간이 단축된다.
수도 코드 작성없이 코딩을 시작하면 시간이 단축되는 것 같은 느낌이 든다. 하지만 문제가 복잡해지고, 코드가 길어진다면 시간이 지나면서 구체적이고 세세한 로직은 기억이 나지 않을 수 있다. 결국 작성하는 시간보다 헤매는 시간이 더 길어질 가능성이 크다. 그러나 본인이 생각한 코드를 수도 코드로 남겨 놓는다면 지표가 되어 헤메는 시간이 단축될 것이다.
2. 디버깅에 용이하다.
코드 작성이 완료되고 테스트를 실행할 때, 오류가 발생했다면 디버깅을 시작할 것이다. 어느 부분에 오류가 났는지 확인할 때 개발 언어로만 쓰인 코드보다 모국어로 쓰인 해당 의사코드를 확인하면 다른 것을 제외한 로직에 신경 쓸 수 있기 때문에 원인 파악이 쉬워진다.
3. 프로그래밍 언어를 모르는 사람과 소통할 수 있다.
생각보다 이부분이 중요하다고 생각한다. 프로그래밍 언어에 익숙하지 않은 사람은 수도코드를 보며 로직을 이해하는데 도움이 될 수있다. 이부분은 협업 과정에서 비개발자와 소통할 때 많은 도움이 된다.
의사코드는 구체적으로 써야한다.
사람에게는 컴퓨터가 가지고 있지 않은 상상력이 있다.
사람에게 요구사항을 부탁하면 이전에 있던 경험을 바탕으로, 혹은 요구사항의 과정을 상상하며 다양한 방법으로 요구사항을 해결하려 시도할 것이다. 또한 직접 소통하며 필요한 요구사항을 해결해 나갈 수 있다.
하지만 컴퓨터는 단순하게 0과 1로만 이루어진 기계다. 만약 컴퓨터에 요구사항을 입력한다면, 로직이 따로 저장되어 있지 않은 이상 동작하지 않을것 이다. 따라서 요구사항에 대한 로직을 사람이 작성하여 기초적인 부분부터 구체적이고 상세하게 명령해야 한다.
만약 일상행활에서 마스크를 쓰는법을 사람에게 알려준다면 대부분 아래와 같이 설명할 것이다.
"마스크로 코와 입을 덮고 턱 아래, 얼굴 측면에 밀착시켜 착용해"
이부분을 컴퓨터에 명령하고자 한다면 아래와 같이 적용해야한다.
public void wearMask() {
//1. 마스크를 꺼낸다.
//2. 마스크 날개를 펼치고 날개 끝을 잡아 오므린다.
//3. 고정심 부분을 위로 잡고 턱에서 시작하여 코와 입을 완전히 가린다.
//4. 만약 귀걸이 마스크라면 왼쪽 귀와 오른쪽 귀에 걸어준다.
// 만약 귀걸이 마스크가 아니라면 마스크를 머리 뒤쪽으로 걸어준다.
//5. 고정심을 코에 밀착되도록 누른다.
//6. 양 손으로 마스크 전체를 누르며 공기 누설이 있는지 체크한다.
//7. 만약 공기 누설이 있다면, 5번으로 돌아간다.
//8. 공기 누설이 없다면 마스크 착용 완료.
}
이처럼 모든 과정을 빈틈없이 의사코드를 작성하고 코드를 작성해야 문제없이 작동된다.
의사코드 양식
의사코드를 작성하는 양식은 크게 두 가지 방식이 대표적으로 쓰인다.
- 다른 사람도 이해할 수 있는 자연어(영어나 한국어처럼 일상에서 사용되는 언어)만 사용한다.
- 자연어와 프로그램 언어의 조합을 사용한다.
사람이 사용하는 자연어는 위의 마스크를 착용하는 방법을 컴퓨터에 입력하는 예 처럼 작성하면된다.
자연어와 프로그램 언어의 조합은 아래와 같이 작성한다.
public void wearMask() {
// 마스크를 꺼낸다.
// 마스크 날개를 펼치고 날개 끝을 잡아 오므린다.
// 고정심 부분을 위로 잡고 턱에서 시작하여 코와 입을 완전히 가린다.
// if (귀걸이 마스크라면) 왼쪽귀와 오른쪽귀에 걸어준다.
// else 마스크를 머리 뒷쪽으로 걸어준다.
// while(공기누설이 있다면)
// 고정심을 코에 밀착되도록 누른다.
// 양 손으로 마스크 전체를 누른다.
//if(공기누설이 없다면) return;
}
의사코드를 작성할 때 중요한 것은 자신만의 원칙을 만들어, 일관성이 있으며 다른 사람도 이해할 수 있는 수도코드를 작성하는 것이다.
'코드 스테이츠' 카테고리의 다른 글
관계형 데이터 베이스 - SQL (0) | 2023.05.24 |
---|---|
REST API (0) | 2023.05.23 |
코드 스테이츠 - 자료 구조 2(Tree/BST/Graph) (0) | 2023.05.15 |
코드 스테이츠 - 자료구조 1(Stack/ Queue) (0) | 2023.05.15 |
코드 스테이츠 - JSON (0) | 2023.05.11 |