..

Search

17) 함수

함수


함수(function)

다음 그림과 같은 계산기는 계산하려는 숫자를 입력하면 내부에서 특정 연산을 수행하고 그 결과를 화면에 출력해 줍니다.

 

calculator

 

이와 비슷한 원리로 특정 값 X를 인수(arguments)로 전달받으면, 반드시 특정 값 Y를 결과로 반환(return)하는 일종의 계산기와 같은 개념을 함수(function)라고 할 수 있습니다.

프로그래밍에서는 하나의 특정 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드의 집합을 함수(function)라고 부릅니다.

 

인수(arguments)란 함수를 호출할 때 함수 내부에서 사용할 수 있도록 전달하는 데이터를 가리킵니다.

함수를 사용하는 이유

지금까지 우리가 살펴본 print(), type(), range() 등과 같은 함수들은 모두 파이썬 내장 함수로 파이썬에서 미리 만들어 제공해 주는 함수들입니다.

 

만약 이러한 함수가 없었다면 우리는 프로그램을 작성하기 전에 먼저 화면에 출력하거나 타입을 확인하는 등과 같은 기본적인 동작을 하는 코드를 매번 따로 작성해야 할 것입니다. 또한, 어떤 동작에 수정 사항이 생긴다면, 그 동작을 사용한 모든 소스 코드를 전부 찾아서 수정해야만 할 것입니다.

 

이처럼 함수를 사용하는 가장 큰 이유는 프로그램 내에서 중복적인 코드의 작성을 최소화하고, 코드의 재사용성을 높여주기 때문입니다.

프로그램에서 특정 작업을 여러 번 반복해서 수행해야 할 때는 해당 작업을 수행하는 함수를 한 번만 작성하면 됩니다. 이후 프로그램 내에서 해당 작업을 수행해야 할 때는 작성해 놓은 함수를 단순히 호출하기만 하면 되기 때문입니다.


함수 선언하고 호출하기

파이썬에서는 파이썬이 제공하는 내장 함수를 그대로 사용하는 것뿐만 아니라 자신만의 함수를 직접 만들어서 사용할 수도 있습니다.

 

파이썬에서 함수는 다음과 같이 선언합니다.

문법

def 함수명(매개변수1, ...):
    실행할 코드1
    실행할 코드2
             ⦙

 

함수명은 함수를 호출할 때 사용하기 위한 이름이며, 매개변수(parameter)는 함수 호출 시 전달되는 인수의 값을 함수 내부에서 사용할 수 있도록 저장할 변수의 이름입니다.

 

이렇게 선언된 함수는 다음과 같은 방식으로 호출할 수 있습니다.

문법

함수명(인수, ...)

 

인수(arguments)는 함수를 호출할 때 함수 내부에서 사용할 데이터를 전달해 주는 역할을 합니다.

 

다음 예제는 hello라는 이름의 함수를 선언하고 호출하는 예제입니다.

예제

def hello(): # 함수의 선언

    print("- 함수 시작 -")

    print("안녕하세요!")

    print("- 함수 끝 -")    

 

 

hello() # 함수의 호출

hello() # 함수의 호출

hello() # 함수의 호출

코딩연습 ▶

실행 결과

- 함수 시작 -
안녕하세요!
- 함수 끝 -
- 함수 시작 -
안녕하세요!
- 함수 끝 -
- 함수 시작 -
안녕하세요!
- 함수 끝 -

 

위 예제의 hello() 함수는 아무런 인수를 가지지 않고 어떠한 값도 반환하지 않으며, 단순히 함수 내부의 코드만을 실행하는 가장 단순한 형태의 함수입니다.


함수 선언하고 호출하기

앞선 예제의 hello() 함수처럼 인수를 전달받지 않는 함수는 언제나 같은 동작만을 수행하게 됩니다. 하지만 대부분의 함수는 인수를 전달받아 해당 인수에 따라 다른 동작을 수행하도록 하는 것이 일반적입니다.

 

함수 호출 시 여러 개의 인수(arguments)를 한 번에 전달할 수 있으며, 인수들은 소괄호(())안에 쉼표(,)를 사용하여 구분합니다.

 

다음 예제는 두 개의 인수를 전달받아 그 합을 출력하는 함수입니다.

예제

def sum(a, b):

    print(a + b)    

 

 

sum(1, 2)

sum(3, 4)

# sum(5)

# sum(6, 7, 8)

코딩연습 ▶

실행 결과

3

7

 

위의 예제에서 함수 선언에 사용된 a와 b를 매개변수라 하고, 함수 호출 시 전달된 1, 2와 3, 4를 인수라고 부릅니다.

위 예제의 5번과 6번 라인처럼 함수를 호출할 때 다른 값의 인수를 전달하면, 그 결과 또한 달라지는 것을 확인할 수 있습니다.

 

또한, 인수를 전달할 때는 반드시 함수의 선언에서 명시된 매개변수의 개수와 같은 수의 인수만을 전달해야 합니다.

만약 주석 처리된 7번과 8번 라인처럼 매개변수의 개수와 다른 수의 인수를 전달하면 TypeError가 발생하며, 프로그램은 강제 종료됩니다.


값을 반환(return)하는 함수

파이썬에서는 전달받은 인수를 가지고 함수 내부에서 여러 명령문을 실행한 결과를 return 문을 사용하여 반환할 수 있습니다.

이러한 반환(return)문은 함수의 종료를 의미하며, 함수를 호출한 곳으로 해당 결괏값을 반환해 줍니다.

 

문법

def 함수명(매개변수1, ...):
    실행할 코드1
    실행할 코드2
             ⦙
    return 결괏값

 

return 문을 사용하여 함수에서 반환된 값은 다음과 같이 곧바로 변수에 대입하여 사용할 수 있습니다.

문법

변수명 = 함수명(인수, ...)

 

예제

def sum(a, b):

    print("- 함수 시작 -")

    # return a + b

    print("- 함수 끝 -")

    return a + b    

 

 

c = sum(1, 2)

print(c)  

 

print(sum(3, 4))

코딩연습 ▶

실행 결과

- 함수 시작 -
- 함수 끝 -
3
- 함수 시작 -
- 함수 끝 -
7

 

위 예제의 8번 라인처럼 반환값을 변수에 대입하여 사용할 수 있으며, 11번 라인처럼 그대로 사용할 수도 있습니다.

하지만 11번 라인처럼 사용하면 함수의 결괏값을 단 한 번만 사용할 수 있으며, 이후에는 해당 결괏값에 접근할 수 없습니다.

 

그리고 3번과 5번 라인의 return 문의 주석 처리를 서로 바꾸면, 4번 라인의 print() 문이 실행되지 않고 함수가 종료되는 것을 확인할 수 있습니다.

이처럼 함수 내부에서 return 문을 만나게 되면 함수의 나머지 부분은 더 이상 실행되지 않고 곧바로 종료됩니다.


연습문제