기본 콘텐츠로 건너뛰기

방송대 파이썬프로그래밍기초 11강: 모듈과 네임스페이스

0-썸네일-요약노트-파이썬프로그래밍기초-11강

방송대 파이썬프로그래밍기초 11강: 모듈과 네임스페이스

프로그램마다 같은 수학 공식과 도구 함수를 다시 작성하면 코드가 길어지고 수정 결과도 제각각이 된다. 모듈은 재사용할 함수·상수·클래스를 하나의 단위로 묶고, 네임스페이스는 가져온 이름이 어디에 등록되는지 구분한다. 두 개념을 연결하면 필요한 기능만 안전하게 불러와 수학 계산, 난수 실험과 실행 시간 측정에 적용할 수 있다.

반복 작성의 문제는 기능을 재사용 단위로 분리해 해결한다

삼각형 넓이, 난수 선택, 실행 시간 측정 같은 기능을 프로그램마다 새로 만들면 공식의 오타를 여러 곳에서 고쳐야 하고, 변수 이름이 서로 충돌할 가능성도 커진다. 이미 검증한 기능을 한곳에 모으고 필요한 프로그램에서 가져오는 편이 관리와 재사용에 유리하다. 파이썬에서 이 재사용 단위가 모듈(module)이다.

모듈은 함수, 상수 또는 클래스를 모아 둔 집합체이며 보통 하나의 .py 파일에 대응한다. 함수는 특정 작업을 처리하고, 상수는 계산에 공통으로 사용하는 값을 제공하며, 클래스는 관련 데이터와 동작을 하나의 설계로 묶는다. 서로 다른 종류의 구성 요소라도 하나의 주제나 책임 아래 모이면 모듈로 재사용할 수 있다.

분리 판단: 여러 프로그램에서 반복되는가, 하나의 주제로 설명할 수 있는가, 수정 이유가 같은가를 확인한다. 세 질문에 모두 해당하는 함수·상수·클래스라면 별도 모듈로 묶을 가치가 크다.

모듈·패키지·라이브러리는 포함 관계로 이해한다

모듈이 하나의 파이썬 파일이라면 패키지(package)는 관련 모듈과 하위 패키지를 모아 둔 폴더다. 라이브러리(library)는 특정 분야의 문제를 해결하도록 여러 모듈과 패키지를 제공하는 더 큰 기능 집합이다. 이 관계를 크기만으로 외우기보다 “파일 단위 기능 → 폴더 단위 조직 → 문제 영역 전체의 도구 모음”으로 연결하면 구분하기 쉽다.

구분주된 형태담는 대상사용자가 얻는 것
모듈파이썬 파일관련 함수·상수·클래스한 책임의 기능 재사용
패키지폴더관련 모듈·하위 패키지여러 기능의 계층적 정리
라이브러리모듈과 패키지의 집합특정 분야의 여러 도구문제 영역을 위한 종합 기능

포함 관계는 절대적인 파일 크기를 뜻하지 않는다. 작은 라이브러리도 있을 수 있고 큰 모듈도 있을 수 있다. 핵심은 코드가 어떤 단위로 공개되고 조직되는지다. 사용자는 라이브러리 전체를 한꺼번에 외우기보다, 현재 문제에 필요한 모듈과 그 안의 멤버를 찾아 가져온다.

import는 모듈 이름을 현재 네임스페이스에 등록한다

네임스페이스(namespace)는 변수·함수·클래스 같은 이름이 저장되고 관리되는 공간이다. import는 단순히 파일 내용을 복사하는 명령이 아니라, 프로그램이 모듈의 기능에 접근할 수 있도록 이름을 현재 네임스페이스에 등록하는 과정으로 이해해야 한다.

모듈을 통째로 가져오면 모듈 이름을 앞에 붙여 멤버에 접근한다. 별칭을 주면 짧은 이름으로 같은 모듈을 가리킬 수 있다.

import math
import random as rnd

root = math.sqrt(81)
pick = rnd.choice([10, 20, 30])

print(root)  # 9.0
print(pick)  # 실행할 때마다 선택 결과가 달라질 수 있음

math.sqrt에서 math는 현재 공간에 등록된 모듈 이름이고 sqrt는 그 모듈 안의 함수다. rnd.choice에서는 별칭 rnd가 모듈을 가리킨다. 접두어가 어느 모듈의 기능인지 드러내므로 같은 이름의 함수가 여러 모듈에 있어도 출처를 구분하기 쉽다.

가져오기 문법은 편의성과 이름 충돌 사이에서 고른다

from 모듈 import 멤버는 필요한 이름만 현재 네임스페이스에 직접 등록한다. 이후에는 모듈 접두어 없이 사용할 수 있다. from 모듈 import *는 공개된 여러 이름을 한꺼번에 가져오지만, 어떤 이름이 어디에서 왔는지 흐려지고 기존 이름을 덮어쓸 위험이 있다.

형식현재 공간에 생기는 이름호출 예판단 기준
import mathmathmath.sqrt(9)출처를 분명히 유지할 때
import math as mmm.sqrt(9)자주 쓰는 긴 이름을 줄일 때
from math import sqrtsqrtsqrt(9)소수의 멤버만 반복 사용할 때
from math import *여러 멤버 이름sqrt(9)이름 출처와 충돌을 통제할 수 있을 때만
from math import sqrt

def sqrt(number):
    return "직접 만든 함수"

print(sqrt(16))  # 직접 만든 함수

이 예에서는 나중에 정의한 함수가 같은 이름 sqrt를 다시 연결한다. 수학 모듈의 제곱근 함수를 부른다고 생각했지만 실제 호출 대상은 달라졌다. import math 후 math.sqrt(16)로 호출했다면 두 이름이 서로 다른 공간에 있어 충돌을 피할 수 있다.

잘못된 접근: 접두어를 줄이는 것만 보고 와일드카드 가져오기를 선택하면 코드가 짧아져도 이름의 출처를 추적하기 어려워진다. 편의성보다 “호출한 이름이 어느 모듈 소속인지 독자가 즉시 알 수 있는가”를 먼저 판단한다.

이름 탐색은 지역에서 전역을 거쳐 빌트인으로 진행된다

강의에서는 네임스페이스를 지역, 전역, 빌트인으로 구분한다. 함수나 메소드 내부에서 만든 이름은 지역 네임스페이스에 있고, 모듈 전체에서 공유되는 이름은 전역 네임스페이스에 있다. len이나 print처럼 파이썬이 기본 제공하는 이름은 빌트인 네임스페이스에 있다.

탐색 단계범위예시이름을 찾으면
지역현재 함수·메소드 내부매개변수와 함수 안 변수그 이름을 사용하고 탐색 종료
전역현재 모듈 전체import math로 등록한 math전역 객체를 사용
빌트인파이썬 기본 코드 범위len, print기본 제공 기능을 사용
rate = 10  # 전역 이름

def show_rate():
    rate = 20  # 지역 이름
    print(rate)

show_rate()  # 20
print(rate)  # 10

show_rate() 안에서는 지역 이름 rate를 먼저 찾아 20을 출력한다. 함수 밖에서는 그 지역 공간을 사용할 수 없으므로 전역 이름의 값 10을 출력한다. 같은 철자의 이름이라도 어느 네임스페이스에서 찾았는지에 따라 연결된 객체가 달라진다.

dir와 help는 외우기보다 확인하는 탐색 도구다

dir()은 현재 네임스페이스에 등록된 이름들을 리스트로 반환하고, dir(객체)는 그 객체에서 확인할 수 있는 멤버 이름을 보여 준다. help()는 함수·클래스·메소드의 사용 방법을 대화형 도움말로 제공한다. 모듈 이름은 기억하지만 함수 철자나 매개변수가 확실하지 않을 때 두 도구를 순서대로 쓰면 된다.

import math

names = dir(math)
print("sqrt" in names)  # True
help(math.sqrt)

먼저 dir(math)로 sqrt가 실제 멤버인지 확인하고, 이어서 help(math.sqrt)로 호출 형식과 설명을 살핀다. 문자열 메소드처럼 모듈이 아닌 객체의 기능도 help("python".upper)와 같이 확인할 수 있다.

기능 확인 순서: 모듈을 가져왔는지 확인한다 → dir(모듈)로 이름 존재 여부를 본다 → help(모듈.멤버)로 사용법을 읽는다 → 작은 입력으로 반환값과 타입을 검산한다.

del과 reload는 이름 제거와 모듈 갱신을 구분한다

del 등록된이름은 현재 네임스페이스에서 그 식별자를 제거한다. 예를 들어 del math를 실행하면 이후 현재 코드에서 math.sqrt라고 접근할 이름이 사라진다. 이것은 파일 자체를 삭제하는 명령이 아니다.

파이썬은 효율성을 위해 불러온 모듈을 메모리에 보관한다. 모듈 파일을 수정한 뒤 같은 실행 환경에서 다시 import하는 것만으로는 변경 내용이 즉시 반영되지 않을 수 있다. 이때 importlib.reload(모듈객체)로 이미 가져온 모듈을 갱신한다.

import importlib
import geometry_tools

# geometry_tools.py를 수정한 뒤
importlib.reload(geometry_tools)

del geometry_tools  # 현재 네임스페이스의 이름 제거

오개념 교정: del geometry_tools는 모듈 파일이나 모든 캐시를 지우는 명령이 아니다. 현재 네임스페이스에서 이름 연결을 없앤다. 반대로 reload()는 이름을 삭제하는 것이 아니라 메모리에 있는 모듈 객체의 코드를 다시 읽어 갱신하는 목적이다.

math는 공식의 상수와 계산 함수를 검증된 도구로 바꾼다

math 모듈은 원주율 pi, 자연로그의 밑 e와 여러 수학 함수를 제공한다. fabs(x)는 절댓값, ceil(x)은 올림, floor(x)는 내림, exp(x)는 지수함수 값, log(x)는 자연로그, sqrt(x)는 제곱근을 계산한다. 삼각함수 sin·cos·tan과 역삼각함수도 사용할 수 있다.

문제 단서멤버예시결과
원주율이 필요함math.pimath.pi * 2원주율의 두 배
양의 제곱근math.sqrtmath.sqrt(49)7.0
정수 위쪽 경계math.ceilmath.ceil(3.2)4
정수 아래쪽 경계math.floormath.floor(3.8)3
라디안 각의 사인math.sinmath.sin(math.pi / 6)0.5

강의의 삼각형 넓이 공식은 두 변의 길이 a, b와 끼인각 α를 사용해 1/2 × a × b × sin(α)로 계산한다. 다음은 a=7, b=9, α가 π/6 라디안인 학습용 예다.

import math

a = 7
b = 9
alpha = math.pi / 6
area = 0.5 * a * b * math.sin(alpha)

print(area)  # 15.75

중간 계산은 math.sin(math.pi / 6) = 0.5이므로 0.5 × 7 × 9 × 0.5 = 15.75다. 입력 각도의 단위와 함수가 기대하는 단위를 맞추지 않으면 문법 오류 없이도 계산 결과가 틀릴 수 있다. 공식, 단위, 함수 호출을 한 묶음으로 검산해야 한다.

random은 범위와 복원 여부에 맞춰 선택 함수를 고른다

난수는 특정 순서나 규칙적 의미 없이 임의로 얻는 수를 뜻한다. random 모듈은 0과 1 사이의 실수, 정수 범위의 값, 시퀀스의 한 원소 또는 여러 원소를 선택하고 순서를 섞는 기능을 제공한다. 함수 이름보다 “숫자 범위인가, 기존 시퀀스인가, 하나인가 여러 개인가”를 먼저 판단한다.

요구도구핵심 결과주의
0과 1 사이 실수 하나random.random()실수 난수정수 선택용이 아니다
a부터 b까지 정수 하나random.randint(a, b)정수 난수양 끝값을 포함한다
간격 c의 범위에서 하나random.randrange(a, b, c)지정 범위의 값끝 경계 b는 포함하지 않는다
시퀀스에서 한 원소random.choice(seq)원소 하나원본 순서는 바뀌지 않는다
서로 다른 여러 원소random.sample(seq, k)k개 원소의 새 리스트선택 개수가 필요하다
원본 순서를 섞음random.shuffle(seq)시퀀스 자체의 순서 변경반환값보다 변경된 원본을 확인한다

가위바위보에서는 후보 셋 가운데 하나만 고르므로 choice가 맞다. 로또 번호처럼 중복 없는 여섯 값을 고를 때는 sample이 요구에 맞고, 숫자 맞히기처럼 1부터 100까지 정수 하나가 필요하면 randint(1, 100)을 쓴다.

import random

user_numbers = {42, 1, 6, 22, 30, 31}
winning = set(random.sample(range(1, 46), 6))
matched = user_numbers & winning

print("당첨 번호:", sorted(winning))
print("맞힌 번호:", sorted(matched))
print("맞힌 개수:", len(matched))

range(1, 46)은 1부터 45까지의 후보를 만들고, sample(..., 6)은 서로 다른 여섯 값을 뽑는다. 두 집합의 교집합은 공통 번호이며 그 길이가 맞힌 개수다. 출력 숫자는 실행마다 달라질 수 있으므로 특정 당첨 번호를 정답으로 외우는 것이 아니라 생성 범위와 비교 절차를 검산해야 한다.

게임 코드는 난수 생성과 판정 규칙을 분리한다

난수 프로그램의 핵심은 임의 값을 만드는 단계와 그 값을 해석하는 단계를 섞지 않는 것이다. 가위바위보에서 컴퓨터 선택은 choice가 담당하고, 승패는 사용자 선택과 컴퓨터 선택의 관계가 결정한다. 숫자 맞히기에서도 목표 숫자 생성은 한 번만 하고, 반복문에서는 입력값과 목표의 대소만 비교한다.

import random

options = ["가위", "바위", "보"]
user = "바위"  # 입력을 대신한 학습용 값
computer = random.choice(options)

if user == computer:
    result = "비겼다"
elif (user, computer) in [("바위", "가위"),
                          ("보", "바위"),
                          ("가위", "보")]:
    result = "이겼다"
else:
    result = "졌다"

print(computer, result)

승리하는 세 쌍을 튜플 목록으로 표현하면 세 개의 elif를 하나의 포함 검사로 묶을 수 있다. 직접 입력을 받을 때는 user가 세 후보 중 하나인지 먼저 검사해야 한다. 난수 함수가 정상이어도 잘못된 사용자 입력을 판정 규칙에 바로 넣으면 의미 없는 결과가 생긴다.

실패 원인: 숫자 맞히기 반복문 안에서 매 시도마다 목표 숫자를 다시 생성하면 사용자가 이전 안내를 바탕으로 범위를 좁힐 수 없다. 목표 생성은 반복문 전에 한 번, 비교와 안내는 최대 20회의 반복 안에서 수행해야 한다.

time은 시각 표현과 경과 시간 측정을 나눠 사용한다

time 모듈은 에포크 이후 누적된 초를 얻고, 이를 시각 구조나 문자열로 바꾸며, 프로그램을 일정 시간 멈추는 기능을 제공한다. 강의에서는 유닉스 에포크를 1970년 1월 1일 00:00:00 GMT로 제시한다. time()의 숫자 자체보다 시작과 끝의 차이를 구하면 코드 실행에 걸린 경과 시간을 측정할 수 있다.

멤버입력·기준결과 또는 동작적합한 목적
time()에포크 기준누적 초를 실수로 반환현재 시점 기록·경과 시간
gmtime()초 또는 현재 시점기준 시각의 구조GMT 기준 분해
localtime(t)초 t지역 기준 시각 구조지역 시각 변환
strftime(fmt, t)형식 문자열과 시각 구조지정 형식의 문자열표시 형식 만들기
ctime()현재 시점읽을 수 있는 시각 문자열빠른 현재 시각 표시
sleep(n)초 n현재 프로세스를 n초 멈춤실행 지연

다음은 1부터 50,000까지 소수를 찾는 강의 문제의 핵심인 실행 시간 측정 구조를 단순화한 코드다. 소수 판정 반복의 앞뒤에서 시각을 기록해 차이를 구한다.

import time

start = time.time()

primes = []
for number in range(2, 50001):
    is_prime = True
    divisor = 2
    while divisor * divisor <= number:
        if number % divisor == 0:
            is_prime = False
            break
        divisor += 1
    if is_prime:
        primes.append(number)

elapsed = time.time() - start
print(primes[:9])
print(f"{elapsed:.3f}초 실행했습니다.")

각 수에 대해 약수가 있는지 확인하고, divisor * divisor <= number까지만 검사한다. 시작 시각과 종료 시각의 차이가 경과 시간이다. 강의 화면의 9.022초는 한 실행의 예일 뿐이며 컴퓨터 상태와 구현에 따라 달라질 수 있다. 알고리즘의 정답은 소수 목록으로 확인하고, 성능은 같은 조건에서 여러 번 측정해 비교해야 한다.

모듈 문제는 출처·이름·입력·상태의 네 축으로 점검한다

모듈 사용 오류는 함수 철자만의 문제가 아니다. 필요한 기능이 어느 모듈에 있는지, 현재 공간에는 어떤 이름으로 등록했는지, 함수가 요구하는 입력의 범위와 타입은 무엇인지, 호출이 원본을 바꾸거나 매번 다른 상태를 만드는지를 함께 확인해야 한다.

점검 축질문대표 오류교정 방법
출처어느 모듈의 멤버인가?sqrt의 출처 불명math.sqrt처럼 소속 표시
이름현재 공간에 어떻게 등록했는가?별칭을 원래 이름으로 호출import ... as ... 확인
입력범위·개수·단위가 맞는가?각도 단위 또는 난수 경계 혼동작은 경계값으로 검산
상태호출 전후 무엇이 달라지는가?shuffle의 원본 변경, 반복 중 목표 재생성변경 대상과 생성 시점을 분리

재사용 가능한 해결 순서: 문제에 필요한 기능을 한 문장으로 정한다 → 모듈과 멤버를 dir·help로 확인한다 → 충돌을 피할 가져오기 형식을 고른다 → 입력 범위·단위·개수를 적는다 → 난수나 시간처럼 실행마다 달라지는 값과 고정 판정 규칙을 분리한다 → 작은 예제로 반환값과 상태 변화를 검산한다.

핵심 개념 정리

  • 모듈은 관련 함수·상수·클래스를 재사용 가능한 하나의 단위로 묶는다.
  • 모듈은 파일, 패키지는 관련 모듈과 하위 패키지의 폴더, 라이브러리는 더 큰 기능 집합으로 이해한다.
  • import는 모듈 이름을, from ... import ...는 선택한 멤버 이름을 현재 네임스페이스에 등록한다.
  • 이름은 지역·전역·빌트인 네임스페이스 순으로 탐색하므로 같은 철자도 발견된 공간에 따라 다른 객체를 가리킬 수 있다.
  • dir는 이름 목록을, help는 사용법을 확인하는 도구다.
  • del은 현재 공간의 이름을 제거하고, importlib.reload는 이미 불러온 모듈의 변경 내용을 갱신한다.
  • math는 상수와 수학 함수, random은 임의 선택, time은 시각 변환과 경과 시간 측정 기능을 제공한다.
  • 난수 결과와 실행 시간은 실행 조건에 따라 달라질 수 있으므로 범위·판정 규칙·측정 절차를 검산한다.

새 문제에서 먼저 필요한 기능을 직접 구현할지 기존 모듈에서 찾을지 결정한다. 모듈을 쓴다면 기능의 출처가 드러나는 가져오기 방식을 선택하고, 현재 네임스페이스에 등록된 실제 이름을 확인한다. 이어서 함수 입력의 범위·단위·개수와 호출 후 상태 변화를 점검한다. 마지막으로 수학 계산은 손계산, 난수 프로그램은 후보 범위와 판정 규칙, 시간 측정은 시작·종료 지점으로 각각 검산하면 모듈을 단순 암기가 아닌 재사용 가능한 문제 해결 도구로 사용할 수 있다.

예상문제 10선

1. 파이썬 모듈의 역할을 가장 정확하게 설명한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④

  • ① 오답: 지역 변수는 함수 호출의 이름 공간에 속하며 모듈의 전체 역할이 아니다.
  • ② 오답: 모듈은 출력문뿐 아니라 다양한 함수·상수·클래스를 담을 수 있다.
  • ③ 오답: 패키지는 여러 모듈을 조직하는 상위 단위이며 변수 하나로 바꾸는 기능이 아니다.
  • ④ 정답: 관련 기능을 묶어 다른 프로그램에서 가져다 쓰게 하는 재사용 목적을 설명한다.

2. 모듈·패키지·라이브러리의 관계를 올바르게 설명한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②

  • ① 오답: 모듈과 패키지의 포함 방향과 역할을 뒤바꾸었다.
  • ② 정답: 파일 단위 기능에서 폴더 단위 조직, 분야별 도구 집합으로 이어지는 관계다.
  • ③ 오답: 네임스페이스는 이름 관리 공간이고 세 용어는 코드 조직 단위다.
  • ④ 오답: 라이브러리의 모듈도 함수·상수·클래스를 제공할 수 있다.

3. import math as m을 실행한 뒤 81의 제곱근을 구하는 올바른 표현은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③

  • ① 오답: 모듈 별칭이 먼저 오고 그 뒤에 멤버 이름이 와야 한다.
  • ② 오답: 현재 공간에는 원래 이름 대신 별칭 m이 등록되었다.
  • ③ 정답: 별칭으로 모듈 객체에 접근하고 점 뒤에서 sqrt 함수를 선택한다.
  • ④ 오답: 모듈 별칭을 함수처럼 호출하고 멤버 위치도 뒤바꾸었다.

4. 함수 안에서 이름을 찾을 때 강의에서 제시한 탐색 순서는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①

  • ① 정답: 가장 가까운 함수 내부부터 모듈 전체, 기본 제공 이름으로 범위를 넓혀 탐색한다.
  • ② 오답: 기본 제공 이름보다 현재 함수의 지역 이름이 우선한다.
  • ③ 오답: 지역 이름을 마지막에 찾으면 가까운 정의가 우선한다는 규칙과 어긋난다.
  • ④ 오답: 패키지와 모듈은 코드 조직 단위이며 이름 탐색 순서의 세 범위가 아니다.

5. 모듈의 함수 이름과 호출 방법이 기억나지 않을 때 가장 적절한 확인 순서는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③

  • ① 오답: del은 이름을 제거하며 사용법을 알려 주지 않는다.
  • ② 오답: sleep은 실행을 지연할 뿐 멤버 탐색 기능이 아니다.
  • ③ 정답: 이름 목록 확인과 개별 사용법 확인이라는 두 도구의 역할을 순서대로 활용한다.
  • ④ 오답: reload는 모듈 코드를 갱신하며 도움말을 출력하지 않는다.

6. del math의 효과를 올바르게 설명한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④

  • ① 오답: del은 파일 시스템 삭제 명령이 아니다.
  • ② 오답: 모듈 내부 정의를 수정하는 대신 현재 공간의 식별자를 제거한다.
  • ③ 오답: 대상은 지정한 이름 하나이며 빌트인 전체가 아니다.
  • ④ 정답: 이름과 객체의 현재 연결을 네임스페이스에서 없애는 동작이다.

7. 중복 없이 1부터 45 사이에서 여섯 숫자를 뽑는 데 가장 적합한 표현은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①

  • ① 정답: 후보 범위에서 중복 없는 여섯 원소를 새 리스트로 선택한다.
  • ② 오답: choice는 한 원소만 반환해 여섯 개 요구를 충족하지 않는다.
  • ③ 오답: 0과 1 사이 실수 하나를 만들어 정수 번호 선택과 다르다.
  • ④ 오답: shuffle은 변경 가능한 시퀀스의 전체 순서를 섞는 동작이며 여섯 개를 직접 반환하지 않는다.

8. a=8, b=5, 끼인각의 사인값이 0.5일 때 삼각형 넓이는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②

  • ① 오답: 두 개의 0.5를 한 번 더 곱한 결과로 공식에 없는 계수를 추가했다.
  • ② 정답: 0.5 × 8 × 5 × 0.5 = 10이다.
  • ③ 오답: 앞의 1/2 또는 사인값 중 하나만 적용한 결과다.
  • ④ 오답: 두 변만 곱하고 1/2와 사인값을 모두 빠뜨린 값이다.

9. 숫자 맞히기 프로그램에서 사용자가 이전 안내로 범위를 좁힐 수 없게 되는 설계는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④

  • ① 오답: 고정 목표를 사용해야 앞선 대소 안내가 다음 시도에도 유효하다.
  • ② 오답: 대소 안내는 사용자가 탐색 범위를 줄이는 근거를 제공한다.
  • ③ 오답: 성공 시 종료는 목표가 고정되어 있을 때의 정상 제어다.
  • ④ 정답: 매번 목표가 바뀌면 이전의 ‘크다·작다’ 정보가 다음 목표에 적용되지 않는다.

10. 모듈 기능을 안전하게 적용하고 검산하는 절차로 가장 적절한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③

  • ① 오답: 출처가 흐려지고 기존 이름을 덮어쓸 수 있어 진단이 어려워진다.
  • ② 오답: 문법이 맞아도 각도 단위나 범위가 다르면 의미 오류가 생길 수 있다.
  • ③ 정답: 모듈 선택부터 이름 해석, 입력 계약, 상태 변화와 결과 검산을 차례로 연결한다.
  • ④ 오답: 난수 선택과 실행 시간은 실행 조건에 따라 달라질 수 있으므로 절차를 검증해야 한다.

참고 자료와 작성 기준

이 글은 해당 차시 강의자료를 바탕으로 학습 목적에 맞게 재구성한 비공식 학습자료입니다. 중복 코드에서 모듈 분리로 이어지는 문제 흐름, 가져오기 방식별 이름 등록표, 네임스페이스 추적, 삼각형 계산 검산, 난수 게임의 생성·판정 분리와 소수 탐색 시간 측정은 학습자가 모듈을 실제 문제에 적용하도록 구성했습니다.

  • 작성·편집: 올에이클래스 학습연구팀
  • 주요 근거: 한국방송통신대학교 컴퓨터과학과, 「파이썬프로그래밍기초」 11강 모듈 강의자료, 2026
  • 보충 자료: 외부 자료를 사용하지 않음
  • 편집 원칙: 올에이클래스 편집 정책
  • 최종 내용 검토: 2026-09-08

댓글