파이썬프로그래밍기초 14강 - 실전 프로젝트 2-1: 틱택토 설계
소프트웨어 개발 라이프사이클과 프로그램의 실행 흐름을 이해하고 배치 처리와 이벤트 기반 프로그래밍을 비교한다. 텍스트 기반 틱택토 게임의 규칙과 요구사항을 분석하여 게임판, 승리 판정, 게임 루프를 단계적으로 설계한다.
제1장 프로그램 개발 준비
1. 소프트웨어 개발 과정
대규모 소프트웨어 개발에는 인력, 시간, 비용 등 많은 자원이 필요하므로 시작부터 폐기까지 체계적으로 관리해야 한다. 소프트웨어 개발 계획을 세우고 고품질 소프트웨어를 만들기 위한 전체 과정을 소프트웨어 개발 라이프사이클(SDLC)이라고 한다.
SDLC는 한 번 작성한 프로그램으로 끝나는 과정이 아니다. 요구사항을 분석하고 설계·구현·검증한 뒤 실제로 운영하면서 오류를 고치고 새로운 요구와 사용환경의 변화를 반영한다. 유지보수에서 발견한 내용은 다시 분석과 설계에 영향을 주므로 순환적인 성격을 갖는다.
2. SDLC의 여섯 단계
| 단계 | 주요 활동 |
|---|---|
| 계획 | 비용, 기간, 인력과 자원 투입 계획 수립 |
| 분석 | 소프트웨어 기능·비기능 요구 정의 및 자료 수집 |
| 설계 | 구조, 데이터, 인터페이스와 사용자 화면 정의 |
| 구현 | 언어 선택, 코딩 규칙 정의, 프로그램 작성 |
| 시험·통합 | 요구 반영 여부와 예상 결과 비교, 오류 파악 |
| 유지보수 | 오류 수정, 새로운 요구와 사용환경 변화 반영 |
SDLC의 목적
개발 전 과정을 단계적으로 관리하여 자원을 합리적으로 사용하고 요구사항을 만족하는 신뢰성 높은 소프트웨어를 만든다.
제2장 프로그램 실행 흐름
1. 배치 프로그램
배치(batch) 프로그램은 수집한 대량의 데이터를 특정 시간에 정해진 처리 방식에 따라 일괄적으로 처리한다. 입력 데이터 파일을 읽어 처리·가공한 뒤 결과 파일을 만드는 흐름이 대표적이다. 실행 중 사용자의 개별 입력에 즉시 반응하기보다 미리 정한 작업을 순서대로 완료하는 데 적합하다.
2. 게임 프로그램의 실행 흐름
게임은 사용자가 언제 버튼을 누르고 어느 위치를 선택할지 미리 알 수 없다. 프로그램은 입력이 발생할 때 이를 감지하고 캐릭터 이동, 화면 갱신, 충돌 판정 등의 작업을 실행해야 한다. 이처럼 사용자 또는 다른 프로그램이 만드는 사건에 반응하는 구조가 필요하다.
3. 이벤트 기반 프로그래밍
이벤트(event)는 프로그램이 감지하고 처리할 수 있는 사용자의 동작이나 사건이다. 버튼 클릭, 키 입력, 마우스 이동 등이 대표적이다. 이벤트 기반 프로그래밍(EDP)은 실행 흐름을 예측하기 어려운 환경에서 이벤트가 발생했을 때 정해진 처리 코드를 실행하는 방식이다.
이 방식은 사용자뿐 아니라 타이머, 운영체제, 다른 프로그램 등에서 발생하는 이벤트에도 반응할 수 있다. 따라서 게임과 그래픽 사용자 인터페이스처럼 상호작용이 많은 프로그램에 적합하다.
| 구분 | 배치 프로그램 | 이벤트 기반 프로그램 |
|---|---|---|
| 흐름의 기준 | 미리 정한 처리 순서와 시점 | 발생한 이벤트 |
| 입력 특성 | 수집된 대량 데이터 | 사용자·장치·프로그램의 사건 |
| 대표 활용 | 파일 일괄 처리 | 게임, GUI 프로그램 |
제3장 이벤트 프로그램과 게임 루프
1. 이벤트 기반 프로그램의 구성
이벤트 발생 장치가 키 입력이나 클릭을 만들면 이벤트 생성기가 이벤트 객체를 만든다. 생성된 이벤트는 이벤트 큐에 저장된다. 이벤트 루프는 큐에서 이벤트를 가져와 확인하고 종류에 맞는 이벤트 핸들러로 전달한다. 이벤트 핸들러는 실제 처리 코드를 실행한다.
| 구성 요소 | 역할 |
|---|---|
| 이벤트 발생 장치 | 버튼, 키보드, 마우스 등으로 사건 발생 |
| 이벤트 생성기 | 발생 사실을 이벤트 객체로 생성 |
| 이벤트 큐 | 처리할 이벤트를 순서대로 저장 |
| 이벤트 루프 | 큐의 이벤트를 가져와 검사하고 전달 |
| 이벤트 핸들러 | 이벤트 종류에 해당하는 실행 코드 수행 |
2. 게임 루프
게임은 초기화 후 종료 조건이 만족될 때까지 게임 루프를 반복한다. 한 번의 루프에서는 이벤트 검사, 이벤트 처리, 게임 상태 업데이트, 화면 생성, 화면 업데이트가 차례로 이루어진다. 종료 이벤트가 발생하면 루프를 빠져나와 게임을 끝낸다.
게임 초기화
while 게임이_진행중:
이벤트 검사
이벤트 처리
게임 업데이트
화면 생성
화면 업데이트
게임 종료
게임 루프의 의미
게임은 입력을 한 번 처리하고 끝나는 것이 아니라 입력 확인, 상태 변화, 화면 반영을 매우 빠르게 반복하여 상호작용을 만든다.
제4장 틱택토 게임 정의와 규칙
1. 틱택토란
틱택토(Tic Tac Toe)는 두 명의 플레이어가 3×3 게임판에서 번갈아 빈칸에 O와 X를 기록하는 게임이다. 자신의 기호 세 개를 가로, 세로 또는 대각선으로 연속하여 놓은 플레이어가 승리한다.
2. 게임 규칙
- 한 플레이어가 아직 기록되지 않은 빈칸에 자신의 기호를 표시한다.
- 다른 플레이어가 남은 빈칸에 자신의 기호를 표시한다.
- 둘 중 한 플레이어가 가로·세로·대각선 중 하나를 자신의 기호로 채우면 승리한다.
- 승리자가 없고 빈칸이 남아 있으면 두 플레이어가 번갈아 계속한다.
- 승리자 없이 모든 칸이 채워지면 무승부로 종료한다.
3. 여덟 가지 승리 상황
3×3 게임판의 승리선은 모두 여덟 개이다. 가로 방향 세 행, 세로 방향 세 열, 왼쪽 위에서 오른쪽 아래로 향하는 대각선 하나, 오른쪽 위에서 왼쪽 아래로 향하는 대각선 하나이다.
승리 판정
3개의 행 + 3개의 열 + 2개의 대각선 = 총 8개의 승리선을 확인한다.
제5장 틱택토 요구사항 분석
1. 시작과 플레이어 선택
게임을 시작할 때 무작위로 먼저 시작할 플레이어를 선택한다. 사용자와 컴퓨터가 각각 O와 X 기호를 사용한다. 어느 쪽이 어떤 기호를 사용할지 명확히 정하여 게임판과 메시지에 일관되게 적용해야 한다.
2. 입력과 기호 표시
플레이어는 빈칸의 행과 열 좌표를 입력하여 기호를 표시한다. 사용자 차례에는 사용자가 키보드로 행·열 번호를 입력하고, 컴퓨터 차례에는 무작위로 빈칸을 선택한다. 이미 기호가 있는 칸은 선택할 수 없으므로 입력 위치가 비어 있는지 검사해야 한다.
3. 종료 조건과 출력
각 차례가 끝난 뒤 승리, 무승부 또는 게임 진행 중인지 확인한다. 종료 조건이 만족되면 게임을 끝내고 그렇지 않으면 다음 플레이어로 전환한다. 게임은 텍스트 그래픽으로 게임판과 진행 메시지를 출력한다.
| 요구사항 | 세부 내용 |
|---|---|
| 게임 시작 | 무작위로 선공 플레이어 선택 |
| 플레이어 | 사용자와 컴퓨터, O와 X 기호 사용 |
| 입력 | 빈칸의 행·열 좌표 선택 |
| 판정 | 승리·무승부·진행 중 확인 |
| 출력 | 텍스트 그래픽 게임판과 안내 메시지 |
제6장 틱택토 프로그램 설계
1. 게임판과 승리 판정 설계
게임판은 2차원 리스트로 만든다. 각 칸의 초기값은 빈칸을 뜻하는 별표(*)로 두고, 플레이가 진행되면 O 또는 X로 바꾼다. 게임판에 빈칸이 남았는지는 모든 칸을 검사하여 확인한다.
board = [["*", "*", "*"],
["*", "*", "*"],
["*", "*", "*"]]
승리 판정은 총 8가지 승리선을 확인한다. 각 행 3개, 각 열 3개와 두 대각선에서 같은 기호가 연속되는지 검사한다.
2. 게임 시작과 한 차례 처리
게임판의 현재 상태를 출력한 뒤 무작위로 선공 플레이어를 정한다. 게임 루프에서 현재 플레이어의 기호를 표시하고 게임판을 업데이트한다. 사용자 차례에는 행과 열을 입력받고, 컴퓨터 차례에는 빈칸 중 하나를 무작위로 선택한다.
3. 게임 루프의 전체 흐름
게임판 생성
현재 게임판 출력
선공 플레이어 선택
while True:
현재 플레이어의 빈칸 선택
선택 위치에 기호 표시
게임판 출력
if 현재 플레이어가 승리:
승리 메시지 출력
break
if 빈칸이 없음:
무승부 메시지 출력
break
플레이어 교대
루프가 한 번 실행될 때 한 플레이어의 차례가 진행된다. 표시 후 즉시 승리 여부를 확인하고, 승리자가 없으면 빈칸 여부로 무승부를 판단한다. 두 종료 조건에 해당하지 않을 때만 플레이어를 교대한다.
4. 기능 분해
구현 단계에서는 게임판 생성, 게임판 출력, 빈칸 검사, 사용자 입력, 컴퓨터 선택, 승리 판정, 플레이어 교대 기능을 각각 함수로 분리할 수 있다. 이렇게 하면 각 기능을 독립적으로 시험하고 오류를 수정하기 쉽다.
설계에서 구현으로
14강은 코드를 바로 작성하기보다 규칙과 요구사항을 분석하고 데이터 구조, 기능, 실행 순서를 설계하는 단계에 초점을 둔다. 다음 단계에서 이 설계를 실제 Python 코드로 옮긴다.
핵심 개념 정리
14강 핵심 요약
- SDLC는 계획, 분석, 설계, 구현, 시험·통합, 유지보수의 순환 과정이다.
- 배치 프로그램은 수집된 데이터를 정한 시점에 일괄 처리한다.
- 이벤트 기반 프로그램은 사용자·장치·다른 프로그램에서 발생한 사건에 반응한다.
- 이벤트 큐는 이벤트를 저장하고 이벤트 루프가 검사하여 핸들러로 전달한다.
- 게임 루프는 이벤트 검사·처리, 상태 업데이트, 화면 생성·갱신을 반복한다.
- 틱택토는 3×3 판에서 O와 X를 번갈아 놓아 한 줄을 먼저 완성하는 게임이다.
- 승리선은 행 3개, 열 3개, 대각선 2개로 모두 8개이다.
- 게임판은 2차원 리스트로 설계하고 빈칸, 승리, 무승부를 판정한다.
- 한 차례마다 위치 선택, 기호 표시, 출력, 종료 판정, 플레이어 교대를 수행한다.
최종 정리
실전 프로젝트에서는 코딩 전에 개발 과정과 실행 환경을 이해하고 게임 규칙을 명확한 요구사항으로 바꾸어야 한다. 틱택토의 데이터 구조, 승리 조건, 사용자·컴퓨터 입력과 게임 루프를 설계하면 이후 구현과 시험을 체계적으로 진행할 수 있다.
예상문제 20선
1. SDLC의 의미로 가장 적절한 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③
SDLC는 소프트웨어의 계획, 분석, 설계, 구현, 시험, 유지보수를 체계적으로 관리하는 과정이다.
2. 비용·기간·인력과 자원 투입을 정하는 SDLC 단계는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①
계획 단계에서 개발에 필요한 비용, 기간, 자원과 인력 투입을 결정한다.
3. 소프트웨어의 기능·비기능 요구를 정의하는 단계는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②
분석 단계에서는 사용자가 원하는 기능과 품질 등 비기능 요구를 파악하고 자료를 수집한다.
4. 오류 수정과 새로운 요구·환경 변화를 반영하는 단계는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
유지보수는 배포 후 발견된 오류를 수정하고 변화한 요구와 환경을 반영한다.
5. 배치 프로그램의 특징은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③
배치 처리는 모아 둔 데이터를 미리 정한 절차와 시점에 한꺼번에 처리한다.
6. 이벤트의 정의로 옳은 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①
키 입력과 버튼 클릭처럼 프로그램이 감지하여 대응할 수 있는 사건을 이벤트라고 한다.
7. 이벤트를 처리 전까지 순서대로 저장하는 곳은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②
생성된 이벤트는 큐에 저장되고 이벤트 루프가 차례로 가져와 검사한다.
8. 이벤트 종류에 해당하는 실제 실행 코드를 수행하는 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
핸들러에는 특정 이벤트가 발생했을 때 수행할 처리 코드가 정의된다.
9. 게임 루프에 일반적으로 포함되지 않는 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③
게임 루프는 입력, 상태, 화면을 반복 처리하며 개발 계획을 매 프레임 작성하지 않는다.
10. 틱택토 게임판의 크기는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①
틱택토는 3행 3열의 게임판에서 진행한다.
11. 틱택토의 전체 승리선 개수는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②
가로 3개, 세로 3개, 대각선 2개를 합하여 모두 8개이다.
12. 틱택토의 무승부 조건은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
누구도 한 줄을 완성하지 못한 채 빈칸이 없어지면 무승부이다.
13. 틱택토 게임판에 적합한 자료구조는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③
행과 열 좌표로 각 칸에 접근하는 3×3 게임판은 2차원 리스트로 표현하기 적합하다.
14. 게임 시작 시 먼저 할 일로 강의록에서 제시한 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①
요구사항은 게임 시작 때 무작위로 먼저 시작할 플레이어를 정하도록 한다.
15. 사용자 차례의 위치 선택 방법은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②
사용자는 행과 열 번호를 입력하여 아직 기호가 없는 칸을 선택한다.
16. 컴퓨터 플레이어의 칸 선택 방법은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
강의 설계에서는 컴퓨터가 현재 비어 있는 칸 가운데 하나를 무작위로 선택한다.
17. 한 플레이어가 기호를 표시한 직후 확인해야 할 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③
각 차례 뒤 승리했는지 확인하고 승리자가 없으면 빈칸 여부로 무승부를 판단한다.
18. 승리자도 없고 빈칸도 남아 있을 때 수행할 일은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①
종료 조건이 아니므로 다음 플레이어로 차례를 바꾸어 루프를 계속한다.
19. 게임 기능을 여러 함수로 분리하는 장점은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②
게임판 출력, 입력, 판정 등을 분리하면 기능별 구현과 검증, 오류 수정이 쉬워진다.
20. 14강 프로젝트 단계의 핵심 활동은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
14강은 틱택토 규칙을 요구사항으로 바꾸고 게임판과 승리 판정, 루프를 설계하는 데 초점을 둔다.
댓글
댓글 쓰기