파이썬 공부
들어가며
지난 글에서는 리스트(List)를 통해 여러 개의 데이터를 하나의 묶음으로 관리하는 방법을 배웠습니다. 이제 우리는 변수, 조건문, 반복문, 그리고 리스트를 조합하여 꽤 유용한 프로그램을 만들 수 있게 되었습니다.
하지만 프로그램의 규모가 커지고 코드가 길어지다 보면, 비슷한 코드를 여러 곳에 반복해서 작성하는 자신을 발견하게 될 것입니다. 예를 들어, 리스트의 평균을 구하는 코드를 프로그램의 여러 부분에서 사용해야 할 수 있습니다. 이 코드를 매번 복사해서 붙여넣는다면, 나중에 수정할 일이 생겼을 때 모든 곳을 찾아 일일이 고쳐야 하는 번거로움이 발생합니다.
이러한 비효율을 해결하고 코드의 재사용성을 높이기 위해 우리는 함수(Function)를 사용합니다. 함수는 특정 작업을 수행하는 코드 블록에 이름을 붙여두고, 필요할 때마다 그 이름을 불러 재사용하는 기술입니다.
함수란 무엇일까?
함수는 특정 작업을 수행하도록 설계된, 재사용 가능한 코드 조각입니다. 우리는 이미 print(), len()과 같은 파이썬에 내장된 함수들을 사용해왔습니다. print()는 괄호 안에 전달된 값을 화면에 출력하는 작업을 수행하고, len()은 리스트나 문자열의 길이를 계산하는 작업을 수행합니다.
이처럼 함수는 복잡한 내부 동작을 감추고, 우리는 그저 함수의 이름과 사용법만 알면 편리하게 원하는 기능을 실행할 수 있습니다. 이제부터는 파이썬이 기본으로 제공하는 함수뿐만 아니라, 우리만의 함수를 직접 만들어보겠습니다.
함수 만들고 호출하기
파이썬에서 함수를 만드는 것을 ‘함수를 정의(define)한다’고 말하며, def라는 키워드를 사용합니다.
1
2
3
def 함수이름():
# 이 함수가 호출되었을 때 실행될 코드 블록
# 들여쓰기를 맞춰야 합니다.
아주 간단한 함수를 하나 정의해볼까요?
1
2
3
4
5
6
7
8
9
# 'say_hello'라는 이름의 함수를 정의
def say_hello():
print("안녕하세요!")
print("함수의 세계에 오신 것을 환영합니다.")
# 함수를 사용하려면 이름을 불러주면 됩니다. 이것을 '호출(call)'이라고 합니다.
print("함수 호출 전")
say_hello()
print("함수 호출 후")
위 코드를 실행하면, say_hello()가 호출될 때마다 정의된 두 줄의 print문이 실행됩니다. 이처럼 함수를 이용하면 여러 줄의 코드를 한 단어로 묶어 필요할 때마다 간편하게 실행할 수 있습니다.
입력과 출력: 매개변수와 반환 값
앞서 본 say_hello 함수는 정해진 동작만 수행합니다. 하지만 함수의 진정한 힘은 외부로부터 값을 입력받아(Input) 처리한 후, 결과를 출력(Output)하는 기능에서 나옵니다.
- 매개변수(Parameter): 함수가 외부로부터 입력을 받기 위해 사용하는 변수입니다. 함수를 정의할 때 소괄호
()안에 이름을 지정해줍니다. - 반환 값(Return Value): 함수가 작업을 마친 후, 호출한 곳으로 돌려주는 결과 값입니다.
return키워드를 사용합니다.
두 숫자를 입력받아 더한 결과를 돌려주는 add 함수를 만들어 보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
# a와 b를 매개변수로 받는 add 함수 정의
def add(a, b):
result = a + b
return result # 계산 결과를 반환
# 함수를 호출할 때 실제 값을 전달합니다. 이 값들을 '인자(Argument)'라고 합니다.
sum1 = add(5, 3)
sum2 = add(10, 20)
print("5와 3의 합:", sum1) # 결과: 8
print("10과 20의 합:", sum2) # 결과: 30
add(5, 3)가 호출되면, 매개변수a에는 5가,b에는 3이 전달됩니다.- 함수 내부에서
result는5 + 3의 결과인 8이 됩니다. return result는 값 8을 함수를 호출했던 자리로 돌려줍니다.- 최종적으로
sum1 = 8이라는 코드가 실행된 것과 같은 효과를 냅니다.
return을 만나면 함수는 즉시 실행을 종료하고 값을 반환합니다. return 뒤에 오는 코드는 실행되지 않습니다.
함수를 사용하는 이유
함수를 사용하면 다음과 같은 장점을 얻을 수 있습니다.
- 재사용성: 한번 만들어두면 필요할 때마다 몇 번이든 다시 불러 쓸 수 있습니다. 코드를 반복해서 작성할 필요가 없습니다.
- 모듈성: 프로그램의 전체 구조를 여러 개의 작은 기능 단위(함수)로 나눌 수 있습니다. 이렇게 하면 코드를 이해하기 쉬워지고, 특정 기능에 문제가 생겼을 때 원인을 찾기 용이해집니다. (디버깅이 쉬워집니다.)
- 가독성:
calculate_average(scores)와 같이 의미 있는 이름의 함수를 사용하면, 복잡한 계산 코드가 무엇을 하는지 한눈에 파악할 수 있습니다. 코드의 가독성이 크게 향상됩니다.
마무리하며
이번 글에서는 코드의 재사용성을 획기적으로 높여주는 함수(Function)에 대해 배웠습니다. def 키워드로 우리만의 함수를 정의하고, 매개변수(parameter)로 입력을 받고 return으로 결과를 돌려주는 방법을 익혔습니다.
함수는 프로그램을 더 체계적이고 효율적으로 만드는 핵심적인 도구입니다. 이제 우리는 스스로 기능을 정의하고 코드를 구조화할 수 있는 능력을 갖추게 되었습니다.
지금까지 우리는 파이썬이 기본으로 제공하는 기능과 우리가 직접 만든 함수를 사용해왔습니다. 하지만 파이썬의 진정한 강점은 전 세계의 수많은 개발자가 만들어 놓은 강력한 기능들을 가져와 사용할 수 있다는 점에 있습니다. 다음 글에서는 이렇게 미리 만들어진 코드의 묶음인 모듈(Module)을 불러와 사용하는 방법에 대해 알아보겠습니다.