함수(Function) — 코드를 하나로 묶어서 재사용하기
동일한 코드가 반복해서 중복 사용되면 가독성면에서도 성능면에서도 좋지 않습니다. 반복되는 코드 덩어리를 이름 하나로 묶어두고 필요할 때마다 꺼내 쓰는 함수 개념을 배웁니다. 함수를 만드는 법, 값을 전달하는 매개변수, 그리고 결과를 돌려받는 반환값(return)까지 차근차근 정리해요.
요즘은 고등학교에서도 코딩을 정규 과목으로 가르치는 시대입니다. 전공자가 아니어도 바이브 코딩(Vibe Coding)이나 생성형 AI(Generative AI)를 활용하면 누구나 그럴듯한 코드 결과물을 만들어낼 수 있게 되었죠.
개발 언어를 접하는, 전공자가 아닌 일반인 입문자가 많아진 것입니다.
이 시리즈는 글쓴이가 실제로 일반인, 고등학생 등 비전공자·입문자에게 파이썬을 가르치면서 정리한 내용들을 교재 형식으로 엮은 글입니다.최대한 쉽고 친절하게 설명하면서도, 컴퓨터와 프로그래밍 언어에 대한 기초 이론까지 함께 짚고 넘어가려 합니다.
고등학생, 비전공자, 완전 입문자도 따라올 수 있게끔 만든 시리즈이고, 실제 과외 수업 자료를 바탕으로 만들어서 학교 시험처럼 개념 확인 문제도 그대로 들어있어요.
중간중간 빈칸 채우기랑 학교 시험 유형 문제가 나오는데, 정답은 바로 안 보이게 접어뒀습니다. 먼저 스스로 생각해본 다음 "보기"를 눌러서 확인해보세요.

함수(Function)는 여러 줄의 코드를 하나의 이름으로 묶어 놓은 것입니다. 필요할 때마다 이름으로 호출하면, 묶어 놓은 코드가 그대로 실행됩니다.
복사할 때 마우스로 우클릭하여 메뉴를 열어 "복사"를 누르는 대신 Ctrl+C 하나로 끝내죠. 함수도 똑같습니다. 여러 줄의 코드를 매번 다시 입력하는 대신, hello()처럼 이름 하나만 부르면 미리 만들어 둔 코드가 그대로 실행됩니다. 즉 함수는 코드의 단축키인 셈이에요.
print("반갑습니다.")
print("안녕하세요.")
print("반갑습니다.")
print("안녕하세요.")
print("반갑습니다.")
같은 코드가 계속 반복됩니다. 반복되는 코드는 수정하기도 어렵고 실수하기도 쉬워요. 그래서 함수를 사용합니다.
실행할 코드
print("안녕하세요.")
hello()
hello()
hello()
안녕하세요.
안녕하세요.
def hello():는 함수를 만들기만 한 것입니다. 아무 일도 일어나지 않아요. 실제로 실행하려면 이름 뒤에 ()를 붙여서 hello()처럼 호출해야 합니다.
1화에서 변수는 데이터를 담아두는 바구니라고 했었죠. 함수도 원리는 같습니다. 다만 바구니 안에 담기는 것이 데이터 하나가 아니라 코드 묶음이라는 점이 다를 뿐이에요.
def hello():라고 정의하면, 그 안의 코드를 하나로 묶어서 hello라는 이름표가 붙은 바구니에 담아둡니다. 나중에 hello()라고 부르면(호출하면), 바구니 안에 담아 둔 코드가 꺼내져서 실행되는 거예요.
정리하면, 변수 = 데이터를 담은 바구니, 함수 = 코드 묶음을 담은 바구니입니다.
- 함수를 만드는 키워드를 쓰시오.
- 다음 코드에서 함수를 실행하는 코드를 작성하시오.
def hello():
print("안녕하세요.")
정답
2. hello()
- 함수(Function)를 사용하는 이유를 서술하시오.
- 다음 코드의 실행 결과를 작성하시오.
def test():
print("Python")
test()
정답
2. Python
지금까지 만든 함수는 항상 똑같은 일만 했습니다. hello()는 항상 "안녕하세요."만 출력해요. 그런데 사람마다 인사말에 이름을 다르게 넣고 싶다면 어떻게 할까요? 서로 다른 이름마다 새로운 함수를 만들어야 할까요? 그럴 필요는 없습니다. 함수에게 값을 전달하면 됩니다. 이때 함수가 전달받는 값을 매개변수(Parameter)라고 해요.
자판기는 하나입니다. 하지만 어떤 버튼을 누르느냐에 따라 콜라, 사이다, 물이 나와요. 함수도 같습니다. 함수는 하나인데, 전달하는 값에 따라 다른 결과를 만들 수 있습니다.
실행할 코드
# 호출: 함수이름(값)
print("안녕하세요.", name)
hello("철수")
hello("영희")
hello("민수")
안녕하세요. 영희
안녕하세요. 민수
print("이름 :", name)
print("나이 :", age)
introduce("홍길동", 17)
나이 : 17
매개변수는 순서대로 값을 전달받습니다. 순서를 바꾸면 엉뚱한 결과가 나와요.
나이 : 홍길동
첫 번째 자리는 name, 두 번째 자리는 age로 정해져 있기 때문에, 넣는 순서가 바뀌면 값도 뒤바뀌어 들어갑니다.
for num in numbers:
print(num)
data = [10, 20, 30]
show_numbers(data)
20
30
9화에서 배운 리스트도 매개변수로 그대로 전달할 수 있어요. 함수 안에서 for로 순회하며 사용하면 됩니다.
- 다음 함수가
"홍길동"을 출력하도록 호출하는 코드를 작성하시오.def hello(name):
print(name)
정답
- 매개변수(Parameter)란 무엇인지 서술하시오.
- 다음 함수 호출이 잘못된 이유를 서술하시오.
def info(name, age):
print(name, age)
info("홍길동")
정답
2. info 함수는 name과 age 두 개의 매개변수를 필요로 하는데, 호출할 때 값을 하나("홍길동")만 전달했기 때문에 오류가 발생합니다.
지금까지 만든 함수는 print()처럼 화면에 출력만 했습니다. 그런데 함수가 계산기처럼 특정한 연산을 수행한다거나, 입력값에 따라 결과값이 달라지는 코드를 수행한다면, 계산한 결과를 돌려받아서, 다른 곳에 저장하고 다시 활용하고 싶다면 어떻게 할까요? 이때 사용하는 것이 return입니다.
10 + 20을 계산기에 입력하면, 계산기는 30이라는 결과를 우리에게 돌려줍니다. 함수도 마찬가지예요. 입력받은 값을 계산해서 결과를 돌려주는 것이 return입니다.
print(10 + 20)
add()
화면에 30이 보이긴 하지만, 이 값을 다른 변수에 저장하거나 활용할 수는 없습니다. 출력하고 끝이에요.
return a + b
result = add(10, 20)
print(result)
이번엔 result라는 변수(바구니)에 계산 결과가 저장됩니다. 저장했으니 나중에 또 꺼내서 쓸 수 있어요.
print()는 화면에 보여주기만 하고 끝입니다. return은 값을 함수 밖으로 돌려줘서, 변수에 저장하거나 다른 계산에 이어서 쓸 수 있게 합니다.
print("안녕하세요.")
result = hello()
print(result)
None
hello()는 출력만 하고 값을 돌려주지 않았기 때문에, result에는 "돌려줄 값이 없다"는 뜻의 None이 저장됩니다.
세 과목 점수의 평균을 구하는 함수가 있다고 해봅시다.
return (kor + eng + math) / 3
class1 = average(90, 80, 70)
class2 = average(100, 90, 80)
class3 = average(60, 70, 80)
print(class1)
print(class2)
print(class3)
90.0
70.0
여기까지는 print로 출력만 했을 때와 비슷해 보입니다. 그런데 return으로 각 반의 평균을 class1, class2, class3에 저장해뒀기 때문에, 이 값들로 추가 계산을 할 수 있어요.
print(total / 3)
print()는 화면에 보여주고 거기서 끝나지만, return은 값을 변수에 저장해서 계산을 계속 이어갈 수 있게 해줍니다. 만약 average() 함수가 print만 했다면, 세 반의 평균을 저장할 방법이 없어서 전체 평균은 구할 수 없었을 거예요.
- 다음 코드의 실행 결과를 작성하시오.
def square(num):
return num * num
print(square(6))
정답
print()와return의 차이점을 서술하시오.- 다음 코드의 실행 결과를 작성하시오.
def add(a, b):
return a + b
print(add(7, 8))
정답
2. 15
'Language > Python' 카테고리의 다른 글
| [고등학생부터, 파이썬] 13. 자료구조 총정리 (0) | 2026.08.20 |
|---|---|
| [고등학생부터, 파이썬] 12. 딕셔너리(Dictionary) (0) | 2026.08.20 |
| [고등학생부터, 파이썬] 11. 튜플(Tuple)과 세트(Set) (0) | 2026.08.20 |
| [고등학생부터, 파이썬] 10. 리스트(List) (0) | 2026.08.20 |
| [고등학생부터, 파이썬] 09. 중첩 반복문 (feat. 별찍기 예제) (0) | 2026.08.19 |
댓글