의사코드(pseudo code) 작성법
의사코드 개념 :
의사코드란 프로그램 코드를 작성할 때 사용하기 위해, 프로그램의 진행 과정을 단계별로 기록해 놓은 것.가짜의(Pseudo)
- 코드
로써, 알고리즘이 수행될 내용을 인간의 언어로 간략히 설명해 놓은것을 말한다.
사용 이유 :
- 나중에 그 프로그램 코드를 읽고 디버깅을 하거나 내용을 수정해야 하는 개발자에게 도움을 줄 수도 있음.
- 컴퓨터 프로그램 알고리즘이 어떻게 실행되어야 할지, 또는 어떻게 실행될 수 있을지 보여줄 수 있음.
- 나중에 코드입력, 테스트, 디버그 수정 단계에서 작업하는 것보다 의사코드 설계 단계에서 미리 오류를 수정을 하는 것이 훨씬 경제적.
- 프로그램의 문제를 해결하기 위한 도구로, 또는 다른 사람들과 프로그램의 흐름에 대해 소통하기 위한 방법으로 활용
(출처 : https://sujinlee.me/pseudocode/)
규칙
의사코드에서 반드시 따라야 하는 규칙 같은 것은 없음.
하지만 다른 개발자들이 쉽게 이해할 수 있는 형식을 사용해야.
본인이 쓰려고 작성하는 경우 생각을 정리하고 계획한 것을 만드는데 도움이 되어야.
(다른 개발자, 하급 개발자, 프로그래밍 할 줄 모르는 사람 등에게 설명이 되도록.)
그러나 자유로운 의사코드 작성도 다음의 규칙 정도는 알고 작성해야 함
: 순차적 명령문, 반복문, 조건문 정도면 의사코드 작성을 위해 필요한 것은 다 알고 있는 것임.
- 순차적 명령문
1. 상품포장()
2. 영수증발행()
3. 상품발송()
반복문
- while문 사용의 경우. 시작할 때, while을 적고, 마칠 때 endwhile을 적는다.
조건이 만족될 때에만 반복문이 실행된다.
while 인구 < 한계
최신 인구 = 과거 인구 + 출생자 수 - 사망자 수
endwhile
ex)
while i <= number
sum = sum + i
endwhile
- for문의 경우
형식 : for i = 숫자1 to 숫자2 do 명령
for i = 1 to inputNumber do
sum = sum + i
endfor
조건문
사용되는 단어들은 if, then, else, endif.
if 업무 시간 > 평균 근무 시간 then
초과 근무 메시지를 표시한다.
else
일반적인 근무 메시지를 표시한다.
endif
예제
텍스트 파일에서 "foo"라는 단어를 찾아 전부 bar라는 단어로 바꾸어 주는 프로그램을 만든다고 하자.
프로그램은
1. 파일을 읽고,
2. foo라는 단어를 찾고,
3. 단어를 바꾼다.
파일을 연다.
파일의 각 행(line)에 대해서 단어를 찾는다.
그 단어를 지운다.
그 자리에 새로운 단어를 넣는다.
파일을 닫는다.
의사코드 수정하기.
의사코드를 작성하는 것의 장점은 어려운 부분을 추후에 채워넣을 수 있다는 것이다.
위 예제에서 단어를 어떻게 찾고 지우고 바꿀 것인지에 대한 내용을 추가해보자.
의사코드를 통해 기능을 추가해보자.
의사코드는 알고리즘문제를 어떻게 접근해야 할지 생각하는데 도움이 된다.
따라서 복잡한 프로그래밍 문제를 단순하게 표현할 수 있다.
기능추가 전
파일을 연다.
파일의 각 행(line)에 대해서 단어를 찾는다.
그 단어를 지운다.
그 자리에 새로운 단어를 넣는다.
파일을 닫는다.
기능추가 후
파일을 연다.
사용자에게 바꾸고 싶은 단어가 무엇인지 물어 본다.
그리고 그 단어를 어떤 단어로 바꾸고 싶은지 물어 본다.
파일의 각 행(line)에 대해서
단어를 찾기 위해 다음과 같은 과정을 진행한다.
각 글자를 읽어 들인다.
글자가 바꾸고 싶은 단어의 첫 글자와 일치하면,
끝까지 일치하는지 확인해 본 후
일치한다면, 단어를 찾은 것이다.
그 단어가 몇 번 나왔는지 센다.
이제 그 단어에 해당하는 글자들을 지운다.
그리고 그 자리에 새로운 단어에 해당하는 글자들을 채워 넣는다.
단어를 몇 번 바꾸어 주었는지 사용자에게 알려준다.
파일을 닫는다.
의사코드 작성의 표준(Standard)
1. 한줄에 하나의 명령만.
의사코드의 한 줄은 한 가지 행동만 표현한다.
할 일 목록을 의사코드로 바꿔보자.
할 일 목록:
이름, 시급, 업무 시간, 공제율(deduction rate)을 확인한다.
계산을 한다.
임금 = 시급 * 업무 시간
공제 = 임금 * 공제율
최종 임금 = 임금 - 공제
이름, 임금, 공제, 최종 임금을 작성한다.
의사코드:
이름, 시급, 업무 시간, 공제율(deduction rate)을 확인한다.
계산한다.
임금 = 시급 * 업무 시간
공제 = 임금 * 공제율
최종 임금 = 임금 - 공제
이름, 임금, 공제, 최종 임금을 파일에 저장한다.
2. 영어로 의사코드를 작성 중이라면 각 명령문의 첫 단어를 대문자로 작성해 준다. 아래는 자주 쓰이는 의사코드 영어 단어이다.
입력(Input): READ, OBTAIN, GET
출력(Output): PRINT, DISPLAY, SHOW
계산(Compute): COMPUTE, CALCULATE, DETERMINE
초기화(Initialize): SET, INIT
요소를 추가(Add one): INCREMENT, BUMP
선형적으로 증가할 때(linear progression): SEQUENCE
반복: WHILE, FOR 조건문: IF-THEN-ELSE
마지막에 조건문이 있는 반복문: REPEAT-UNTIL IF-THEN-ELSE
대신 조건 분기처리: CASE
부울 : TRUE / FALSE
그외 : REPEAT - UNTIL RETURN BEGIN / EXCEPTION / END
출처 : https://sujinlee.me/pseudocode/
3. 어떻게 코드로 표현할지 적지 말고, 하고 싶은 이야기가 뭔지 기록한다.
어떤 개발자들은 "if a % 2 == 1 then"같이 실제 프로그램 코드처럼 의사코드를 작성한다.
이러면 그것을 읽는 사람들은 a, %, == 같은 기호들의 의미를 추측해야 한다.
그 대신 "숫자가 홀수라면(if an odd then)"은 어떨까.
좀 더 쉽고 명확하게 의미를 파악할 수 있을 것이다.
4. 프로세스에 필요한 모든 것을 빠짐없이 기록한다. 의사코드는 단순한 구조의 문장으로 작성하며, 대개 변수가 사용되지 않지만, 계정 번호, 이름, 거래 횟수 같은 현실에서 사용되는 단어를 이용해 프로그램이 해야 할 일을 설명한다.
다음은 유효한 의사코드의 예이다.
계정 번호와 비밀번호가 유효하고 일치하면, 기본 계정 정보를 보여 준다.
각 주문량에 비례하게 총비용을 할당한다.
다음은 유효한 의사코드가 아니다.
g=54/r이라고 하자.
(이유: 변수를 쓰지 말고, 각 변수의 실제 의미를 적어 주자.)
다 될 때까지 주요 과정을 반복한다.
(이유: "주요 과정"이 뭔지, "다 되는 것"이 뭔지 명확하게 해야 한다.)
5. 블록으로 코드의 구조를 정리해준다. 대개 들여 쓰기를 이용해서 각 명령문 간의 관계를 보여 준다. 블록을 만드는 방법은 2가지가 있다.
1. 중괄호 사용하기 { ... }
2. 빈칸 사용하기.
블록 안에 블록이 들어간다면, 들여 쓰기는 더 깊어져야 한다.
반복문 시작 (b를 1에서 9까지)
출력 : a * b = 값 (개행)
반복문 종료
의사코드를 적용해보기
prices 클래스를 만듦.
제출 버튼에 이벤트 추가
if bookButtonWrapper의 classList에 "disable" 클래스가 없으면 then {
제출할 form을 만듦.
productId field 번들을 추가, 설정 (json 이용)
displayInfoId field 번들을 추가, 설정. (json 이용)
reservationEmail, reservaionName, reservationTelephone 번들을 추가, 설정.(querySelector 이용)
reservationYearMonthDay를 설정.(querySelector 이용)
prices 배열을 생성.
for 처음부터 ticket_body 클래스 내 qty의 개수만큼 do
var count = qty클래스 내 .count_control_input클래스 의 value
if count가 0이 아니면 then
prices에 productPriceId와 count의 정보를 갖고 있는 객체를 넣음.
endif
prices를 form에 추가.
바디에 form을 추가하고 제출.
}
else {
오류메시지 변수 만들기.
오류메시지 출력.
오류메시지 1초 뒤에 없애기.
}
endif
생각보다 작성은 쉬웠지만 실제로 생각처럼 흘러가지를 않아서 많은 코드수정이 필요했다.
그러나 의사코드를 작성하지 않고 위와 같은 과정을 코딩하는 상상을 하니 끔찍했다..
refs - 의사코드
https://ko.wikihow.com/%EC%9D%98%EC%82%AC%EC%BD%94%EB%93%9C-%EC%9E%91%EC%84%B1%EB%B2%95
https://sujinlee.me/pseudocode/
https://codingcoding.tistory.com/1002
https://ko.wikihow.com/%EC%9D%98%EC%82%AC%EC%BD%94%EB%93%9C-%EC%9E%91%EC%84%B1%EB%B2%95#_note-3
최근댓글