새로운 프로그래밍 언어를 배우는 일은 생각보다 즐거운 경험이 될 수 있습니다. 저는 새로운 언어를 배울 때마다 변수 정의, 문장 작성, 표현식 평가라는 세 가지 핵심에 집중합니다. 이러한 기본 개념을 전반적으로 이해하고 나면 나머지 부분은 스스로 익혀 나갈 수 있는 경우가 많습니다. 대부분의 프로그래밍 언어는 서로 유사한 점이 많기 때문에, 한 가지 언어를 이미 알고 있다면 새로운 언어를 배우는 과정은 고유한 세부 사항을 파악하고 차이점을 인식하는 일에 가깝습니다.
새로운 프로그래밍 언어를 연습하기 위해 저는 간단한 테스트 프로그램을 작성하는 편입니다. 자주 활용하는 예제 중 하나가 바로 "숫자 맞추기" 게임입니다. 컴퓨터가 1부터 100 사이의 숫자를 하나 선택하고, 사용자가 정답을 맞힐 때까지 반복해서 추측하도록 요구하는 프로그램입니다.
"숫자 맞추기" 프로그램은 프로그래밍 언어의 여러 핵심 개념을 한꺼번에 다룹니다. 변수에 값을 할당하는 방법, 문장을 작성하는 방법, 조건 평가와 루프를 처리하는 방법까지 포함되어 있어, 새로운 언어를 학습하기 위한 훌륭한 실습 예제가 됩니다.
Bash로 숫자 맞추기 게임 구현하기
Bash는 대부분의 Linux 시스템에서 표준 셸로 사용됩니다. 풍부한 명령줄 사용자 인터페이스를 제공할 뿐만 아니라, 스크립트 형태의 완전한 프로그래밍 언어도 지원합니다.
Bash가 익숙하지 않다면 다음 소개 자료들을 먼저 참고하는 것이 좋습니다.
- Bash란 무엇인가?
- Bash 프로그래밍 시작하기
- 시스템 관리자를 위한 Bash 스크립팅 입문
- Bash에서 함수 작성하는 방법
- Bash에 대해 더 알아보기
"숫자 맞추기" 게임을 직접 작성하면서 Bash를 자연스럽게 익혀 볼 수 있습니다. 다음은 제가 구현한 코드입니다.
#!/bin/bash
number=$(( $RANDOM % 100 + 1 ))
echo "Guess a number between 1 and 100"
guess=0
while [ "0$guess" -ne $number ] ; do
read guess
[ "0$guess" -lt $number ] && echo "Too low"
[ "0$guess" -gt $number ] && echo "Too high"
done
echo "That's right!"
exit 0
스크립트 상세 분석
스크립트의 첫 번째 줄인 #!/bin/bash는 Linux에게 이 스크립트를 Bash 셸로 실행하라고 지시하는 역할을 합니다. 모든 스크립트는 #! 문자 쌍으로 시작하며, 이는 해당 파일이 셸 스크립트임을 나타냅니다. #! 바로 뒤에는 실행할 셸의 경로가 위치하며, 이 예제에서는 /bin/bash, 즉 Bash 셸을 지정했습니다.
변수에 값을 할당하려면 변수 이름 뒤에 = 기호를 붙이면 됩니다. 예를 들어 guess=0이라는 문장은 guess 변수에 0이라는 값을 할당합니다.
read 문을 사용하면 사용자에게 값을 입력받을 수 있습니다. read guess라고 작성하면 Bash는 사용자가 텍스트를 입력할 때까지 기다린 후, 입력된 값을 guess 변수에 저장합니다.
변수의 값을 참조하려면 변수 이름 앞에 $를 붙입니다. 따라서 guess 변수에 값이 저장되어 있다면 $guess로 해당 값을 가져올 수 있습니다.
변수 이름은 원하는 대로 지정할 수 있지만, Bash는 몇 가지 특수 변수 이름을 자체적으로 예약해 두고 있습니다. 그중 하나가 RANDOM으로, 참조할 때마다 매우 큰 난수를 생성합니다.
값을 저장하면서 동시에 연산을 수행하려면 해당 문장을 특수 괄호로 묶어야 합니다. 이렇게 하면 Bash가 먼저 문장을 실행하고, =가 그 결과값을 변수에 저장합니다. 수학적 표현식을 평가할 때는 문장 주위에 $(( ))를 사용합니다. 이중 괄호는 산술 표현식을 의미합니다. 앞선 예제에서 number=$(( $RANDOM % 100 + 1 ))는 $RANDOM % 100 + 1 표현식을 평가한 후 그 결과를 number 변수에 저장합니다.
+(더하기), -(빼기), *(곱하기), /(나누기), %(나머지)와 같은 표준 산술 연산자를 모두 사용할 수 있습니다.
결국 number=$(( $RANDOM % 100 + 1 )) 문장은 1부터 100 사이의 난수를 생성합니다. 나머지 연산자(%)는 두 수를 나눈 후의 나머지를 반환하는데, 이 경우 Bash는 난수를 100으로 나누어 0부터 99 범위의 나머지를 얻습니다. 여기에 1을 더하면 최종적으로 1부터 100 사이의 난수가 완성됩니다.
Bash는 조건식과 루프 같은 흐름 제어도 지원합니다. "숫자 맞추기" 게임에서 Bash는 guess의 값이 number와 같지 않은 동안 계속 루프를 반복합니다. 추측한 숫자가 정답보다 작으면 "Too low", 크면 "Too high"를 출력해 힌트를 제공합니다.
실행 결과 살펴보기
스크립트 작성을 마쳤다면 이제 실행하여 "숫자 맞추기" 게임을 직접 플레이해 볼 수 있습니다. 정답을 찾을 때까지 계속 추측해 보세요.
Guess a number between 1 and 100
50
Too high
30
Too high
20
Too high
10
Too low
15
Too high
13
Too low
14
That's right!
스크립트를 실행할 때마다 Bash는 서로 다른 난수를 선택하기 때문에 매번 새로운 게임을 즐길 수 있습니다.
이 "숫자 맞추기" 게임은 새로운 프로그래밍 언어를 배울 때 훌륭한 입문용 프로그램입니다. 몇 가지 공통적인 프로그래밍 개념을 아주 단순한 방식으로 다루기 때문입니다. 이 간단한 게임을 다양한 프로그래밍 언어로 구현해 보면 핵심 개념을 확인하고 언어별 세부 차이를 비교하는 데 큰 도움이 됩니다.
가장 좋아하는 프로그래밍 언어가 있으신가요? 그 언어로 "숫자 맞추기" 게임을 어떻게 작성하시겠습니까? 이 글 시리즈를 계속 팔로우하시면 흥미로운 다른 프로그래밍 언어들의 예시도 만나보실 수 있습니다.