패턴 인식과 일반화 — 같은 뼈대를 찾아 변수로
서로 다른 프로그램인데 만드는 순서가 놀랍도록 닮은 경우가 많습니다. 그 공통 뼈대를 찾아내는 것이 패턴 인식, 달라지는 부분만 변수로 바꿔 하나의 틀로 다시 쓰는 것이 일반화입니다. 1장에서 나눈 조각들을 나란히 놓고 이 두 기술을 훈련합니다.
1개념 정리
패턴을 찾으면 한 번 만든 틀을 값만 바꿔 여러 프로그램에 다시 쓸 수 있습니다.
예를 들어 숫자 맞히기 게임과 가위바위보 게임은 소재가 완전히 다르지만, 만드는 순서를 뜯어보면 같은 뼈대를 공유합니다.
그 뼈대를 하나의 틀로 만들어 두면, 다음에 비슷한 게임을 만들 때 처음부터 나누지 않고 값만 채워 넣으면 됩니다.
다만 아무 두 프로그램이나 "비슷해 보인다"고 묶는 것은 좋은 패턴 찾기가 아닙니다.
좋은 패턴 찾기와 일반화는 아래 세 가지 기준을 지켜야 합니다.
| 기준 | 나쁜 예 ✗ | 좋은 예 ✓ | 확인하는 법 |
|---|---|---|---|
| 1. 겉이 아니라 하는 일로 묶기 |
둘 다 카드가 나오니 같은 패턴이라 함 — 겉모습으로 묶음 | 둘 다 "입력 → 비교 → 반복" 순서라 같은 패턴이라 함 | 소재·화면색·제목 말고, 조각이 하는 일의 순서를 비교 |
| 2. 변하는 것과 안 변하는 것 가르기 |
"두 게임은 그냥 다 똑같다"고 뭉뚱그림 — 차이를 못 봄 | 흐름(반복·비교)은 그대로, 내용(무엇을 비교하나)만 다르다고 가름 | 두 프로그램을 나란히 놓고 줄마다 같은지 다른지 표시 |
| 3. 변하는 것만 변수로 빼기 |
흐름까지 통째로 빈칸으로 만들어 뜻이 사라짐 — 너무 많이 뺌 | 게임마다 달라지는 값만 [입력], [비교 규칙] 같은 빈칸으로 | 빈칸에 각 값을 넣으면 원래 프로그램이 그대로 되살아나는지 확인 |
일반화가 잘 됐는지는 한 가지로 판단합니다 — 빈칸에 값을 채웠을 때 원래 프로그램들이 하나도 빠짐없이 되살아나는가. 되살아나면 성공, 무언가 빠지거나 뭉개지면 다시 손봅니다.
2예제 풀이 — 두 게임의 공통 뼈대 찾기
문제: 1장에서 나눈 "숫자 맞히기 게임"과 "가위바위보 게임"의 조각 목록을 나란히 놓고, 두 게임이 공유하는 공통 뼈대를 찾아 하나의 틀로 일반화하는 과정을 처음부터 끝까지 보여줍니다.
2. 사용자에게 추측 숫자를 입력받는다
3. 추측과 정답을 비교한다
4. 비교 결과에 따라 "더 큽니다 / 더 작습니다"를 보여준다
5. 정답을 맞힐 때까지 2~4를 반복한다
6. 맞히면 축하 메시지와 시도 횟수를 보여준다
2. 컴퓨터의 손 모양을 무작위(랜덤)로 정한다
3. 두 손 모양을 비교해 이번 판에 누가 이겼는지 가린다
4. 이번 판 결과와 지금까지의 승수를 보여준다
5. 어느 한쪽이 2번 이길 때까지 1~4를 반복한다
6. 마지막 승자를 보여준다
| 공통으로 하는 일 | 숫자 맞히기에서 | 가위바위보에서 |
|---|---|---|
| 컴퓨터가 비교할 값을 정한다 | 1~100 중 정답을 정한다 | 컴퓨터 손을 정한다 |
| 사용자에게 입력을 받는다 | 추측 숫자를 입력받는다 | 손 모양을 입력받는다 |
| 입력과 값을 비교해 결과를 가려낸다 | 크다/작다/같다를 비교한다 | 규칙으로 누가 이겼는지 가린다 |
| 결과를 보여준다 | 힌트를 보여준다 | 이번 판 결과와 승수를 보여준다 |
| 끝 조건까지 반복한다 | 정답을 맞힐 때까지 | 한쪽이 2번 이길 때까지 |
| 최종 결과를 보여준다 | 시도 횟수 | 최종 승자 |
2. 끝 조건이 될 때까지 다음을 반복한다
2-1. 사용자에게 입력을 받는다
2-2. 입력과 컴퓨터 값을 정해진 규칙으로 비교해 결과를 가려낸다
2-3. 결과를 보여준다
3. 최종 결과를 보여준다
※ 아직은 두 게임에 공통인 흐름만 적었습니다. 무엇을 입력받고 무엇과 비교하는지는 게임마다 다릅니다.
2. [끝 조건]이 될 때까지 반복한다
2-1. 사용자에게 [입력]을 받는다
2-2. [입력]과 [비교 대상]을 [비교 규칙]으로 비교해 결과를 가려낸다
2-3. [결과]를 보여준다
3. [최종 결과]를 보여준다
| 변수(빈칸) | 숫자 맞히기 | 가위바위보 |
|---|---|---|
| [입력] | 추측 숫자 | 손 모양 |
| [비교 대상] | 1~100 정답 | 컴퓨터 손 |
| [비교 규칙] | 크다·작다·같다 | 가위바위보 이김 규칙 |
| [끝 조건] | 정답을 맞힘 | 한쪽이 2번 이김 |
| [비교 대상 정하는 시점] | 시작에 한 번 | 매 판 |
| [최종 결과] | 시도 횟수 | 최종 승자 |
3따라 하기 — 하이로우 카드 게임에 틀 적용
이번에는 "컴퓨터가 카드를 한 장 보여주면, 다음 카드가 그보다 높을지(하이) 낮을지(로우) 사용자가 맞히는 게임"에 앞의 일반화 틀을 적용합니다. 맞히면 계속 이어 가고, 틀리면 끝나며, 몇 장까지 이어 갔는지가 점수입니다. 물음에 하나씩 답하면서 나아갑니다.
| 변수(빈칸) | 하이로우 카드 게임 |
|---|---|
| [입력] | 다음 카드가 높을지/낮을지 예측 |
| [비교 대상] | 컴퓨터가 뒤집을 다음 카드 |
| [비교 규칙] | 다음 카드가 예측대로 높은지/낮은지 가려냄 |
| [끝 조건] | 예측이 틀림 (또는 카드가 다 떨어짐) |
| [비교 대상 정하는 시점] | 매 판 |
| [최종 결과] | 이어 간 카드 장수 |
점검: 하이로우는 카드를 매 판 새로 뒤집으므로 "정하는 시점 = 매 판"입니다. 이 점에서 가위바위보와 같은 갈래이고, 숫자 맞히기와는 시점만 다릅니다. 소재는 카드로 완전히 새롭지만, 틀 하나로 세 게임이 모두 표현됩니다 — 이것이 일반화의 힘입니다.
4스스로 풀기
난이도를 골라 아래 입력 칸에 직접 답을 씁니다. 다 쓴 뒤 예시 답안과 비교하고, 점검 목록으로 스스로 확인합니다. 기본부터 차례로 푸는 것이 좋습니다.
※ 입력한 내용은 저장되지 않습니다. 남기고 싶으면 공책이나 문서에 옮겨 둡니다.
예시 답안 보기 — 반드시 먼저 쓴 뒤에 엽니다
② 공통 뼈대(틀):
2. 답을 입력받는다
3. [정답]과 비교해 맞는지 가려낸다
4. 맞으면 점수를 올리고 결과를 보여준다
5. 문제 목록 끝까지 1~4를 반복한다
6. 최종 점수를 보여준다
③ 변수: [문제] — 사칙연산 식 / 낱말과 뜻, [정답] — 계산 결과 / 올바른 뜻.
나머지(답 입력받기·채점·점수·반복)는 두 게임이 똑같으므로 틀에 그대로 둡니다. 이 부분까지 변수로 빼면 뜻이 사라집니다.
※ 입력한 내용은 저장되지 않습니다. 남기고 싶으면 공책이나 문서에 옮겨 둡니다.
예시 답안 보기 — 반드시 먼저 쓴 뒤에 엽니다
① 공통 뼈대(틀):
2. 명단 끝까지 다음을 반복한다
2-1. 다음 이름을 보여준다
2-2. 그 사람에게 [질문]의 답을 입력받는다
2-3. 답을 기록한다
3. 결과표를 보여준다
② 변수: [질문]·[답의 종류]·[결과표 형식].
③ 설문 받기 적용: [질문] = "좋아하는 과목", [답의 종류] = 과목 이름. 나머지 흐름은 그대로 — 값만 바꿔 끼우면 완성됩니다.
이 뼈대는 게임 루프와 다른 '명단 훑기' 종류입니다. 그래도 공통 뼈대를 찾아 변수로 빼는 일반화 기술 자체는 게임이든 아니든 똑같이 통합니다.
※ 입력한 내용은 저장되지 않습니다. 남기고 싶으면 공책이나 문서에 옮겨 둡니다.
예시 답안 보기 — 반드시 먼저 쓴 뒤에 엽니다
① 끝 기준 비교: 하이로우 뼈대의 반복은 [끝 조건 — 예측이 틀림]에서 멈추고, 매 번 사용자 예측을 컴퓨터 값과 비교해 가려냅니다. 출석 부르기 뼈대의 반복은 [명단의 끝]에서 멈추고, 비교보다 기록이 중심입니다.
② 억지로 합치면: "언제 끝나는가"가 두 갈래(끝 조건 / 목록의 끝)로 뭉개져 빈칸이 늘고, 오히려 더 헷갈립니다. 하나의 틀이 두 가지를 다 담으려다 어느 쪽도 깔끔히 되살리지 못합니다.
③ 이름 제안: '비교 반복형'(입력을 값과 비교해 끝 조건까지 반복)과 '목록 훑기형'(명단을 끝까지 훑으며 기록) 두 패턴으로 나눠 이름 붙이는 편이 낫습니다.
④ 뺄 수 있는 것 / 없는 것: 흐름(반복·비교·기록의 순서) 자체는 변수로 뺄 수 없습니다 — 그 순서가 곧 패턴의 정체이기 때문입니다. 변수로 뺄 수 있는 것은 그 흐름 안에서 달라지는 값(입력 종류·비교 대상·끝 조건의 구체적 내용)뿐입니다.
① 세 문제 중 어디에서 가장 막혔고, 무엇을 바꾸었을 때 풀렸습니까?
② 세 문제에서 공통으로 쓴 방법은 무엇입니까? (공통 뼈대 찾기 → 달라지는 것만 변수로 빼기 — 지금 한 이 사고가 바로 패턴 인식과 일반화입니다.)
③ 다음에 새 프로그램을 만나면, 패턴을 찾기 위해 무엇부터 하겠습니까?
더 알아보기 — 매개변수, 중복 제거(DRY), 디자인 패턴
1. 변수의 실제 이름 — 매개변수와 인자
이 장에서 만든 틀의 빈칸 [ ]은 실제 개발에서 함수의 매개변수(parameter)가 됩니다.
예를 들어 일반화 틀을 playGuessGame(비교대상, 비교규칙, 끝조건) 같은 함수로 만들 수 있습니다.
함수를 부를 때 빈칸에 실제로 넣는 값(예: "1~100 정답")을 인자(argument)라고 부릅니다.
2. 같은 코드를 두 번 쓰지 않기 — DRY 원칙
같은 뼈대를 게임마다 새로 만들면 코드가 겹치고, 한 곳을 고칠 때 여러 곳을 함께 고쳐야 합니다.
그래서 소프트웨어 공학에는 DRY 원칙(Don't Repeat Yourself — 반복하지 마라)이 있습니다.
겹치는 부분을 하나의 틀(함수)로 모으는 일을 중복 제거라고 하며, 패턴 인식과 일반화가 그 첫 단계입니다.
3. 문제 해결의 되풀이되는 틀 — 디자인 패턴
프로그램을 만들다 보면 여러 상황에서 똑같은 구조가 자꾸 나타납니다.
자주 나타나는 좋은 구조에 이름을 붙여 모아 둔 것을 디자인 패턴(design pattern)이라고 합니다.
이 장에서 '비교 반복형'과 '목록 훑기형'에 이름을 붙인 것이 바로 패턴에 이름을 주는 연습입니다.
자가진단
개념을 새 상황에 적용하는 문제입니다. 답을 고르면 즉시 채점과 해설이 나옵니다. ↻ 다시를 눌러 여러 번 풀 수 있습니다.
핵심 정리
- 패턴 인식은 겉모습이 아니라 하는 일의 구조로 묶는 것입니다. 소재·화면·제목이 아니라 조각이 하는 일의 순서를 봅니다.
- 일반화는 흐름은 그대로 두고 달라지는 값만 변수(빈칸)로 빼는 것입니다. 흐름까지 빼면 뜻이 사라집니다.
- 잘 된 일반화는 빈칸에 값을 넣으면 원래 프로그램들이 되살아납니다. 안 맞는 것을 억지로 한 틀에 합치지 않습니다.
이 장이 참고한 자료
- Hunsaker, E. (n.d.). Computational thinking. In The K-12 educational technology handbook. EdTech Books. https://edtechbooks.org/k12handbook/computational_thinking
- Jeong, G., Lash, T., & Israel, M. (2017). Helpful strategies for project planning during K-12 computer science instruction. Project TACTIC, Creative Technology Research Lab, University of Illinois. https://ctrl.education.illinois.edu/TACTICal/project-planning.html
- Liedahl, B. (2026, June 22). Teaching computational thinking without a computer. Edutopia. https://www.edutopia.org/article/teaching-computational-thinking-without-computer/