STEP 1. 함수 (Function)
1. 함수의 정의
함수란 특정 작업을 수행하는 코드 묶음을 하나의 이름으로 정의한 것이다.
함수를 사용하면 다음과 같은 장점이 있다.
• 코드의 중복을 줄일 수 있다
• 프로그램의 구조를 명확하게 만들 수 있다
• 유지보수와 재사용이 쉬워진다
파이썬에서 함수는 def 키워드를 사용하여 정의한다.
def 함수이름(매개변수1, 매개변수2, ...):
# 함수가 수행할 문장들
# ...
return 반환값
함수는 입력을 받아 처리하고, 필요한 경우 결과를 반환한다.
1.1 매개변수(Parameter)와 인자(Argument)의 차이
함수 정의와 함수 호출을 구분해서 이해하는 것이 핵심이다.
매개변수(Parameter)
함수를 정의할 때 함수 내부로 전달받을 수 있는 변수를 의미한다.
• 함수를 정의할 때 사용하는 변수
• 함수 내부에서 입력값을 받아들이는 역할
• 아직 실제 값은 정해지지 않은 상태
즉, “이 함수는 이런 값을 받을 예정이다”라고 선언하는 변수이다.
인자 (Argument)
함수를 호출할 때 실제로 넘기는 값이다.
• 함수를 호출할 때 실제로 전달하는 값
• 매개변수에 대입되어 함수 내부로 전달된다
즉, “이 함수에 이 값을 넣겠다”라는 의미이다.
def add(a, b): # a, b는 매개변수(parameter)
return a + b
result = add(3, 5) # 3과 5는 인자(argument)
print(result) # 출력: 8
1.2 반환값 (Return Value)
함수는 return 키워드를 통해 작업 결과를 호출한 곳으로 돌려줄 수 있으며, 이를 반환값이라고 한다.
• return 키워드를 사용한다
• 반환값이 있으면 함수의 실행 결과로 사용 가능하다
• return이 실행되면 함수는 즉시 종료된다
반환값이 필요한 경우
함수의 실행 결과를 다른 변수에 저장하거나, 다음 계산에 사용해야 할 때는 반드시 반환값이 필요하다.
• 계산 결과를 재사용해야 할 때
• 함수의 결과를 조건문, 반복문, 다른 함수의 입력으로 사용해야 할 때
• 프로그램의 흐름을 값으로 제어해야 할 때
반환값이 필요하지 않은 경우
함수가 어떤 작업을 수행하는 것 자체가 목적일 때는 반환값이 없어도 된다.
• 화면에 출력만 하는 함수
• 로그를 남기거나 메시지를 보여주는 함수
• 파일 저장, 데이터 전송 등 부수 효과가 목적일 때
# 반환값이 없는 경우
def greet(name):
print("Hello,", name)
# return 문이 없으므로 None 반환
greet("Alice") # "Hello, Alice"를 출력하고 반환값은 None
# 반환값이 하나인 경우
def square(x):
return x * x
result = square(4)
print(result) # 16
# 반환값이 여러개인 경우
def divide_and_remainder(a, b):
quotient = a // b # 몫
remainder = a % b # 나머지
return quotient, remainder
q, r = divide_and_remainder(10, 3)
print("몫:", q) # 몫: 3
print("나머지:", r) # 나머지: 1
반환값이 없는 함수는 암묵적으로 None을 반환한다.
2. 다양한 매개변수 전달 방식
함수는 다양한 형태로 입력값을 받을 수 있다.
2.1 위치 인자 (Positional Arguments)
가장 기본적인 전달방식이다. 매개변수에 순서대로 값이 전달되기 때문에 순서가 중요하다.
def add(a, b):
print(a + b)
add(3, 5) # a=3, b=5
add(5, 3) # a=5, b=3
2.2 기본값 매개변수 (Default Parameters)
매개변수에 기본값을 설정할 수 있다. 만약 인자를 전달하지 않으면 기본값이 사용된다
def greet(name, message="Hello"):
print(message, name)
greet("Alice") # "Hello Alice" - message에 기본값 사용
greet("Bob", "Hi") # "Hi Bob"
2.3 키워드 인자 (Keyword Arguments)
함수 호출 시 매개변수 이름을 명시하여 인자를 전달할 수 있다.순서와 관계없이 전달 가능하다.
def introduce(name, age):
print("이름:", name)
print("나이:", age)
introduce(name="Charlie", age=25)
introduce(age=30, name="Diana") # 순서를 바꿔도 명시적이라 오류 없음
3. Docstring (문서 문자열)
파이썬 함수에서 삼중 따옴표(""")로 작성하고, 함수 사용법과 의도를 기록할 수 있다
def add(a, b):
"""두 수를 더한 값을 반환하는 함수"""
return a + b
help(add)

주석과의 차이점?
# 주석은 사람만 보는 메모고,
docstring은 “파이썬도 이해하는 공식 설명서”라 할수있다.
Docstring(문서 문자열)은 주석과 달리 파이썬 객체의 속성으로 저장되며 help()로 출력이 가능하다.
이는 협업 및 유지보수에서 매우 중요한 요소이다.
4.지역 변수 vs 전역 변수
4.1변수의 스코프란? (먼저 짚고 넘어가기)
스코프란, 변수가 어디에서 만들어졌고, 어디까지 접근 가능한지의 범위를 의미한다.
파이썬에서는 변수는 선언된 위치에 따라서 지역변수, 전역 변수로 나눠진다.
4.2 지역 변수(Local Variable)
• 함수 안에서 선언된 변수
• 해당 함수 내부에서만 사용 가능
• 함수 실행이 메모리에서 제거됨
def my_func():
x = 5 # 지역 변수
print(x)
• 지역 변수는 함수가 호출될 때 생성된다.
• 함수가 종료되면 사라진다.
• 함수 밖에서는 접근할 수 없다.
즉, 지역 변수는 함수 내부의 임시 작업용 변수라고 이해하면 된다.
4.3 전역 변수(Global Variable)
• 함수 밖에서 선언된 변수
• 프로그램 전체에서 접근 가능
• 모든 함수에서 읽기 가능
x = 10 # 전역 변수
def my_func():
print(x)
• 전역 변수는 프로그램 시작과 함께 생성
• 프로그램이 종료될 때까지 유지
• 여러 함수에서 공유 가능
전역 변수는 여러 함수가 공통으로 사용하는 값에 적합하다
4.4 지역 변수와 전역 변수의 이름이 같을 때
x = 10 # 전역 변수
def my_func():
x = 5 # 지역 변수
print("함수 내부:", x)
my_func()
print("함수 외부:", x)
결과 설명
• 함수 내부에서는 지역 변수 x가 우선 사용
• 함수 외부에서는 전역 변수 x가 그대로 유지
즉, 지역 변수가 전역 변수보다 우선순위가 높다
4.5 함수 안에서 전역 변수를 수정할 수 없는 이유
x = 10
def my_func():
x = x + 1 # 에러 발생
파이썬은 함수 안에서 값을 할당하는 변수를 지역 변수라고 판단한다.
따라서 x = x+1에서 오른쪽의 x를 지역변수로 인식하나 아직 값이 없어 에러가 발생한다.
즉, 함수 안에서 대입이 발생하면 자동으로 지역 변수로 취급한다.
4.6 global 키워드
함수 안에서 전역 변수를 사용하겠다고 명시하는 선언이다.
x = 10
def my_func():
global x
x = x + 1
my_func()
print(x)
global x를 선언하면 함수 내부의 x는 지역 변수가 아닌 전역 변수가 된다.
따라서 함수 안에서 전역 변수의 값을 직접 수정 가능
⚠️ 주의사항 ⚠️
• 전역 변수는 프로그램 전체에 영향을 준다
• 값이 어디서 바뀌는지 추적하기 어려워진다
• 코드 유지보수와 디버깅이 어려워질 수 있다
따라서 함수는 값을 반환하고, 전역 변수는 가급적 읽기 전용으로 사용하는 것이 좋다.
STEP 2. 모듈 (Module)
1. 모듈이란?
모듈(Module)이란 함수, 변수, 클래스 등을 하나의 파일(.py)에 모아 둔 코드 단위를 의미한다.
파이썬에서는 하나의 .py 파일이 곧 하나의 모듈이 된다.
모듈을 사용하는 목적은 다음과 같다.
• 코드의 재사용성 향상
• 기능별 코드 분리로 가독성 및 유지보수성 향상
• 협업 시 역할 분담 용이
2. 모듈 호출 (import)
모듈을 사용하기 위해서는 import 키워드를 사용한다.
# main.py (모듈 사용 예시)
import mymodule
result = mymodule.add(3, 5)
print(result) # 출력: 8
print(mymodule.PI) # 출력: 3.14159
이 방식은 모듈 전체를 불러오는 방법이며, 이후에는 모듈이름.함수이름 형태로 접근한다.
위의 경우 mymodule 아래에 정의된 함수와 변수를 mymodule.함수명 혹은 mymodule.변수명 형태로 접근할 수 있다.
모듈을 불러온다는 것은 해당 파일에 정의된 이름들을 현재 코드에서 사용할 수 있게 만든다는 의미다.
3. 특정 함수나 변수만 가져오는 방법
모듈 전체가 아닌 특정 함수나 변수만 가져오고 싶다면 from 구문을 사용할 수 있다
from mymodule import add, PI
print(add(10, 20)) # mymodule.add가 아닌 add로 바로 사용 가능
print(PI)
이 경우, 모듈 이름 없이 바로 sqrt()를 사용할 수 있다.
다만 어떤 모듈에서 가져온 함수인지 코드만 보고 알기 어려울 수 있으며 이름 충돌 가능성이 존재한다
따라서 규모가 커질수록 신중히 사용해야 한다.
4. 모듈 이름에 별칭(Alias) 사용하기
모듈 이름이 길거나 더 짧은 이름으로 사용하고 싶다면 import 모듈명 as 별칭 문법을 사용한다.
또한, from mymodule import add as plus 와 같이 특정 함수에 별칭을 붙일 수도 있다.
import mymodule as mm
print(mm.add(2, 2)) # 별칭 mm로 접근
from mymodule import add as plus
print(plus(3, 4))
별칭은 기능에는 영향을 주지 않으며, 이름만 바꾸는 것이다.
5. 파이썬 표준 라이브러리 (내장 모듈)
파이썬은 기본 설치만으로도 다양한 기능을 바로 사용할 수 있도록 표준 라이브러리를 제공한다.
이를 표준 라이브러리(내장 모듈) 라고 하며, 별도의 설치 없이 import만으로 사용 가능하다.
대표적인 예시는 다음과 같다.
• math : 수학 연산
• random : 난수 생성
• datetime : 날짜와 시간 처리
• os : 운영체제 관련 기능
• sys : 파이썬 실행 환경 제어
표준 라이브러리는 별도 설치 없이 바로 사용할 수 있다.
6. 외부 모듈 (서드파티 라이브러리)
표준 라이브러리만으로 해결하기 어려운 전문적인 작업을 위해, 다른 개발자들이 만들어 배포한 모듈을 사용할 수 있다.
이를 외부 모듈(서드파티 라이브러리) 라고 한다.
일반적으로 pip를 사용해 설치한다.
예시로, pandas 라는 데이터 전처리 라이브러리를 설치하고 사용해보자
# 터미널(명령 프롬프트)에서 다음 명령어를 실행:
pip install pandas
# 파이썬 코드에서 사용
import pandas as pd
# 딕셔너리 형태로 데이터 생성
data = {
"name": ["Alice", "Bob", "Charlie", "David", "Eva"],
"age": [25, 32, 18, 47, 29],
"city": ["Seoul", "Busan", "Incheon", "Daegu", "Seoul"],
"score": [85, 92, 78, 64, 90]
}
# DataFrame 만들기
df = pd.DataFrame(data)
print(df) # 페이지 소스 출력
구글 코랩 환경에서는 이미 많은 라이브러리가 설치되어 있어 바로 import가 가능한 경우도 많다.
외부 모듈은 다음과 같은 특징을 가진다.
• 특정 목적에 특화된 기능 제공
• 데이터 분석, 시각화, 머신러닝 등에서 필수적
• 프로젝트 환경에 따라 설치 여부가 달라질 수 있음
7. 파이썬의 모듈 검색 경로
파이썬에서 import 문을 실행하면, 다음 순서로 모듈을 탐색한다.
-
- 현재 실행 중인 스크립트가 있는 디렉토리
- PYTHONPATH 환경 변수에 설정된 경로
- site-packages 디렉토리 (외부 라이브러리)
- 파이썬 표준 라이브러리 디렉토리
이 경로 목록은 sys.path를 통해 확인할 수 있다.
이 개념은 “왜 같은 이름의 모듈이 있는데 다른 것이 불러와지는가”를 이해하는 데 중요하다.
만약 해당 경로에 모듈이 없으면 ModuleNotFoundError가 발생한다.
8. 모듈(Module)과 패키지(Package)
패키지는 여러 개의 모듈을 모아 둔 디렉토리(폴더) 이다.
• 프로젝트 규모가 커질수록 모듈 수가 증가
• 모듈을 폴더 구조로 정리해 계층적으로 관리하기 위해 사용
• 논리적으로 관련된 모듈들을 하나의 묶음으로 관리
즉, 패키지는 모듈의 상위 개념이다.
8.1. 패키지의 기본 구조
패키지는 다음과 같은 디렉토리 구조를 가진다.
mypackage/
__init__.py
mymodule.py
utils.py
• mypackage : 패키지 이름
• __init__.py : 해당 디렉토리를 패키지로 인식하게 하는 파일
• mymodule.py, utils.py : 패키지 안에 포함된 모듈들
이 구조에서 mypackage는 하나의 패키지가 되며, 그 안의 모듈들은 패키지명.모듈명 형태로 접근한다.
import mypackage.mymodule
from mypackage import utils
패키지를 사용하면 규모가 커진 프로젝트를 논리적 단위로 더 체계적으로 관리할 수 있다.
'G.파이썬 > 파이썬 기초 복습' 카테고리의 다른 글
| [Python] 자료형 STEP 3. 딕셔너리 (0) | 2026.01.14 |
|---|---|
| [Python] 자료형 STEP 2. 튜플 (0) | 2026.01.14 |
| [Python] 자료형 STEP 1. 리스트 (0) | 2026.01.13 |
| [Python] 조건문과 반복문 (0) | 2026.01.12 |
| [Python] 입출력과 변수형 (0) | 2026.01.12 |
