손코딩. 말 그대로 IDE의 도움 없이 A4 용지에 손으로 코딩하는 방식.
코딩 테스트에 종종 사용된다고 하여 찾아보았다. 손으로 푸는 방식이라 저마다 방법이 달라서 명확한 규격이 있는 것은 아닌 것 같지만 대체로 큰 틀은 유지하는 것 같다. 검색을 통해 찾아보니 손으로 문제를 푸는 게 왜 필요한지 모르겠다는 글들도 많이 접할 수 있었다. IDE 자동완성과 적합한 대안 추천 기능이 있는데 시험을 위한 시험이 아닌가 하는 의문점들이 대부분이었다. 그러나 시험이 아닌 경우 실제로 코드를 짤 때에는 IDE와 구글 검색의 도움을 받을 수 있을 지 모르지만 어쨌든 코딩테스트 문제를 푸는 것은 로직을 연습하는 것이니까. 연습하는 동안은 손으로 로직을 짜보는 것도 좋을 것 같다. 로직을 정확하게 이해하고 실행 흐름을 공부하는 방향으로는 좋을 것 같아 간단한 문제들은 손으로 연습해보기로 한다.
아무리 검색을 해도 손으로 코드 짜는 방법에 대해서 명확하게 알려주는 글이 없어(아마도 자연어로 쓰이는 방식이기 때문으로 추정) ChatGPT에게 손으로 코딩하는 방법을 물어보았고 몇가지 답변을 얻었다.
손으로 코딩하는 방법 흐름
1. 문제 이해하기: 먼저 문제를 이해하고 필요한 입력 및 출력을 명확하게 정의하세요. 문제를 완전히 이해하는 것이 해결책을 찾는 데 중요합니다.
2. 의사 코드 작성: 코드를 작성하기 전에 노트에 의사 코드를 작성하세요. 의사 코드는 코드의 논리를 설명하는 것으로, 실제 코드보다는 간단하고 자연어에 가깝습니다.
3. 코드 작성: 의사 코드를 기반으로 실제 코드를 작성합니다. 코드를 작성하는 동안 가능한 한 단계적으로 생각하고, 코드의 각 부분이 예상대로 작동하는지 확인하세요.
4. 문법 및 구문 검토: 코드를 작성한 후에는 문법 및 구문 오류를 찾아 수정하세요. 특히 괄호와 세미콜론 같은 작은 디테일들을 확인하는 것이 중요합니다.
5. 테스트 및 디버깅: 코드가 완성되면 테스트 케이스를 사용하여 코드를 테스트하고 예상대로 작동하는지 확인하세요. 버그가 발견되면 디버깅하여 수정하세요.
여기서 로직과 의사코드 작성이 무엇인지 조금 더 세부적으로 검색을 해보았다.
로직
로직은 주어진 문제를 해결하기 위한 계획이나 접근 방식을 의미한다. 프로그래밍에서 로직은 일련의 단계나 조건을 따라 원하는 결과를 얻기 위한 방법을 설명한다. 로직은 문제를 해결하기 위한 전략이며, 문제를 해결하는 과정에서 사용되는 수학적이거나 논리적인 규칙을 포함할 수 있다.
입력과 출력: 주어진 입력에 대해 원하는 출력을 얻기 위한 과정을 설명한다.
조건과 제약: 문제에서 주어진 조건과 제약을 고려하여 해결 방법을 설정한다.
알고리즘: 문제를 해결하기 위한 알고리즘 또는 절차를 설명한다.
제어 구조: 반복문, 조건문 등을 사용하여 프로그램의 흐름을 제어하는 방법을 결정한다.
의사코드(Pseudo Code)
설계자가 알고리즘 로직에 집중할 수 있도록 알고리즘을 묘사하는 정형화된 언어. 의사코드는 완벽을 요구한다. 소스코드 한줄 한줄 대입되기 위해 전체적인 로직을 설명해야 한다.
의사코드 사용 목적
의사코드를 보면 코드를 짠 사람의 의도를 알 수있기 때문에 디버깅하거나 수정해야 할때 개발자에게 도움을 주게됩니다.
알고리즘이 어떻게 실행되고 결과가 어떻게 나오게 되는지 보여줄 수 있습니다. 나중에 발생할 오류,버그 등을 의사코드 작성 단계에서 미리 수정할 수 있습니다. 다른 사람과 협업할 때 프로그램의 문제를 해결하기 위한 도구로써 프로그램의 흐름에 대해 의견을 나누기 위한 하나의 방법으로 쓰기도 합니다.
설계의 기초단계로 프로그램을 이해하기 쉽게 됩니다.
나중에 유지보수를 용이하게 할 수있다.
의사코드 규칙
반드시 지켜야 하는 규칙은 없지만 몇가지 통용되는 규격은 존재한다.
1. 명령문은 한 줄에 하나의 명령만 순차적으로 작성되어야 한다.
2. 반복문 사용시 시작과 끝을 명시한다
while 조건문
예시) 주식이 4000원을 넘으면 구매 중지하는 프로그램 작성
while 주식가격 < 4000
주식 갯수++;
endwhile
for 조건문
예시) 주식 300주를 구매하는 프로그램 작성
for i=0 to 300 do
주식++;
endfor
if else 조건문 (사용단어 : if, then, else, endif)
예시) 주식이 4000원 이하면 2주씩 구매하고 아니면 1주 구매하는 프로그램
if 주식가격<=4000 then
주식갯수 += 2
else
주식갯수++
endif
3. 블록을 사용하여 코드의 구조, 범위 명확히 하기
등등이 있지만 이정도만 알아도 규격을 유지하는 것은 가능할 것 같다. 손코딩을 할 때와는 좀 더 자세히 자연어로 풀어써야 한다는 점이 다르지만 로직을 타인에게 명확하게 설명하는 방법도 중요하므로 가끔씩 연습해보도록 한다.
손코딩을 할 때에는 코드를 직접 적어나가기 때문에 컴퓨터를 통한 실행이나 디버깅 도구를 사용할 수 없다. 그러므로 직접 로직을 따라 테스트 케이스를 추적해나가는 방법을 사용한다.
손코딩 디버깅 방법
1. 실행 흐름 추적: 코드를 작성하는 과정에서 각 줄마다 실행 흐름을 따라가며 직접 계산하고 변수의 값을 추적한다.
2. 테스트 케이스 작성: 손코딩한 코드에 대해 여러 입력 값에 대한 테스트 케이스를 작성하여 코드를 검증해본다. 다양한 입력 값을 테스트하고 예상 결과와 실제 결과를 비교하여 코드의 정확성을 확인한다.
3. 실행 예시 시나리오: 코드의 각 부분이 정확히 동작하는지 확인하기 위해 실행 예시 시나리오를 작성한다.
4. 루프 및 조건문 검증: 코드에 포함된 루프나 조건문이 올바르게 작동하는지 확인하기 위해 각 루프 반복이나 조건 분기에 대한 검증을 수행한다.
처음에는 문제 푸는 시간이 오래 걸리겠지만 로직이 익숙해진다면 문제 푸는 시간이 줄어들 것으로 기대해본다. 또한 작성한 코드를 타인에게 설명하는 방법을 훈련할 수 있으므로 소통 면에서 도움이 될 것 같다.
'ETC (생각 보관소)' 카테고리의 다른 글
코딩테스트 연습 한달차 후기 (0) | 2024.04.27 |
---|---|
스트림과 람다에 대한 생각 (0) | 2024.04.20 |