함수는, 입력받은 특정 값을 함수 내에 정의된 연산을 통해 일관된 결과값으로 돌려주는 기능을 한다. 아마 정규 교육과정을 무사히 거치신 분들이라면, 수학 시간에 이런 형태의 수식을 많이 보았을 것이다.
f(x) = x + 1
이 말은 f(x) 함수는 입력되는 숫자(x)에 1을 더해서 결과를 반환한다는 뜻이다. 즉, f(2)의 결과는 2+1인 3이되고, f(99)는 99+1인 100이 된다. 수식으로 나타내면 아래와 같이 될 것이다.
f(2) = 3
f(99) = 100
컴퓨터의 함수도 수학의 함수와 별반 다를 것이 없다. 하지만 프로그래밍을 하다보면, 함수의 사용 목적에 따라 함수의 종류가 몇 가지로 나누어짐을 알 수 있다(물론 공식적으로 Python에서 함수의 종류에 대해 명시하지는 않지만...).
함수는 입력값에 따른 결과값을 반환한다. 따라서, 입력값이 있거나 없는 경우, 또는 반환할 결과값이 있거나 없는 경우, 총 4가지의 함수 종류가 나타날 수 있게 된다. 하나씩 확인해보자.
1. 입력값도 없고, 연산에 따른 출력값 반환도 없는 경우
프로그램 코드를 작성하면서, 매우 긴 문자열을 출력해야한다는 상황이 생긴다고 해보자. 예를 들어, 세상에서 가장 긴 단어 중에 하나인 "Rindfleischetikettierungsuberwachungsaufgabenubertragungsgesetz(소고기 상표부착 감시평가 업무에 관한 법률)"와 "Dieselkraftstoffsverbrennungsabgasnachbehandlungssystemsteuerungsverbesserungsverfahren(디젤연료 연소배기가스 후처리 시스템 조정 개선 방법)"을 주기적으로 화면에 출력해야한다고 해보자.
아마 Python에 많이 익숙하지 않다면, print("Rindfleisch...")로 시작하는 코드를 줄창 칠 것이고, 변수에 익숙한 분들이라면 이 단어들을 word = "Rindfleisch..." 와 같이 변수로 지정한 뒤, print(word)로 코드를 작성할 것이다.
변수로 사용해도 큰 문제는 없지만, 만약 해당 코드를 현재 파일이 아닌 다른 Python 코드 파일에서도 사용하고 싶다면, 함수를 지정하는 것이 편하다.
필자는 이 단어를 출력하는 함수 이름을 "long_word_print"라고 명명하고, 아래와 같이 함수를 선언했다.
========================================================================
def long_word_print():
word1 = "Rindfleischetikettierungsuberwachungsaufgabenubertragungsgesetz"
word2 = "Dieselkraftstoffsverbrennungsabgasnachbehandlungssystemsteuerungsverbesserungsverfahren"
print(word1)
print(word2)
========================================================================
함수 내에는 해당 함수에서만 사용할 수 있는 변수를 선언하는 것도 가능하다. 따라서, 읽기도 어려운 두 단어를 word1과 word2 변수로 선언하고, print()함수로 출력하도록 코드를 구성했다.
이제, 이 코드가 작동할 수 있도록 함수를 호출하는 내용만 추가해주면, 다음과 같이 함수에 의한 코드 동작을 확인할 수 있다.
=========================================================================
def long_word_print():
word1 = "Rindfleischetikettierungsuberwachungsaufgabenubertragungsgesetz"
word2 = "Dieselkraftstoffsverbrennungsabgasnachbehandlungssystemsteuerungsverbesserungsverfahren"
print(word1)
print(word2)
long_word_print() # 함수의 선언
=========================================================================
python long_word_print.py 명령어를 입력하자, 코드대로 긴 단어들이 순차적으로 출력되는 것을 확인할 수 있다.
이와 같이, 함수에 입력되는 값(인자)도 없고, 그에 따른 반환값도 없는 함수는, 주기적으로 특정 문구를 출력해야할 때 많이 사용한다.
2. 입력값이 존재하나 반환되는 출력값이 존재하지 않는 함수.
사용자의 로그인이 필요한 프로그램을 만든다고 가정하자. 만약, 어떤 사용자가 로그인 할 때마다.
"안녕하세요. '사용자' 님"
이라는 문구를 출력하려 한다고 하자. '사용자'는 로그인 하는 계정 ID를 지정하려고 한다.
'사용자'라는 계정 ID는 로그인하는 사용자마다 각기 다르기 때문에, 이 값을 함수 입력값으로 사용하면 된다. ID를 입력받고, 이 값을 이용해 해당 문구를 출력하게 하는 코드는 다음과 같이 작성할 수 있다.
=========================================================
username = input("ID: ") #ID를 입력받는 동시에, ID를 username이라는 변수에 저장
def welcome(username): # 함수의 선언
print("안녕하세요. {}님".format(username))
welcome(username) # 함수의 호출
=========================================================
즉, 함수에서는 입력값만 받으며, 이 값에 따라, 실행하는 결과물만 달라질 뿐, 어떠한 결과값도 반환하지 않는다. 이러한 함수는 보통, 반복적인 문자열을 출력해야 하지만, 일부 내용에 변화가 필요한 문자열을 출력해야 하는 경우 많이 사용한다. 예를 들면, 오늘의 최고 기온, 최저 기온을 출력하는 프로그램이나, 환율을 명시하는 프로그램을 작성할때도 위와 같은 함수를 주로 사용한다.
3. 입력값이 존재하고, 반환되는 출력값도 존재하는 함수
일반적인 수학의 함수와 비슷하다. 함수 내에 연산과정이 포함되는 경우, 이 함수가 주로 쓰인다. 가장 간단한 예시로는 두 숫자를 더하거나 빼고 그 결과값을 반환하는 함수를 들 수 있다. 덧셈을 예로 들어보자. 함수가 2개의 숫자를 입력값으로 받고, 이 두 숫자의 합을 결과값으로 반환해야 한다고 가정해보자.
======================
def sum(number1, number2):
return number1 + number2
result = sum(52, 74)
print(result)
======================
이렇게 작성된 코드는 항상 52+74의 결과값만 result 변수로 변환하며, 이 result 값을 화면에 출력하게 된다. 아래의 그림과 같이.
만약, 두 개의 숫자를 직접 입력한 뒤, 그 합을 확인하고 싶다고 한다면, 다음과 같이 코드를 수정해주면 된다.
======================
num1 = int(input("Number1: "))
num2 = int(input("Number2: "))
def sum(number1, number2):
return number1 + number2
result = sum(num1, num2)
print(result)
======================
이처럼, 입력값에 대해 특정 연산을 수행하고, 그 결과값을 반환할 필요성이 있는 코드를 작성할 때에는, 입력값과 반환 출력값이 모두 존재하는 함수를 사용하면 된다. 아마 프로그래밍을 하면서 가장 많이 접할 수 있는 함수의 형태가 아닐까 싶다.
4. 입력값이 존재하지 않으나, 출력값이 반환되는 함수
입력값이 존재하지 않지만, 연산에 의한 출력값이 반환되는 함수도 만들 수 있다. 예를 들어, 사용자가 함수 내의 변수에 입력한 숫자의 크기에 따라, 특정 문구를 반환하는 함수를 만든다고 가정해보자.
===============================
def function_test():
number = int(input("Input Number: "))
if(number < 10): return "less than 10"
elif(number == 10): return "number is 10"
else: return "greater than 10"
print(function_test())
===============================
코드의 마지막을 보면 print(function_test())라는 문구가 보이는데, 이 말은, print() 함수 내의 function_test()를 먼저 수행하고, 수행 뒤 반환되는 결과값을 print하라는 의미이다. 즉, function_test()는 함수 외부에서 입력되는 값이 없더라도, 내부의 변수를 통해 자체적인 연산을 진행하고, 그에 따른 결과값을 print()함수의 인자로 반환한다는 이야기다.
정리하자면, 함수 외부 값이 아닌, 함수 내부의 변수만으로 연산을 진행할 때 사용하는 함수 형태인데, 사실 프로그래밍에 익숙하지 않은 상황에서는 큰 쓰임새가 없는 함수 형태다.
이번 포스팅에서는 python 뿐만 아니라, 다른 프로그래밍 언어에서도 사용할 수 있는 함수의 종류 4가지에 대해 알아보았다. 그리고 코드를 작성하는 목적에 따라 함수의 형태를 적절하게 골라서 사용할 수 있음을 확인했다. 하지만 함수의 사용 예시는 함수의 작동을 설명하기 위한 단순한 예시이며, 코더의 코딩 습관에 따라 함수 형태에 따른 사용 목적이 다양하게 발현될 수 있다.
FIN.
'Python > Python Basic' 카테고리의 다른 글
18. Python - Python Class에 대하여 (0) | 2020.04.15 |
---|---|
17. Python - Python 함수의 입력값(인자) 수를 동적으로 정의하기 (0) | 2020.03.17 |
15. Python - Python 함수 사용 이유, 선언 및 호출 (0) | 2020.02.07 |
14. Python - input() 함수로 필요한 정보를 입력해보자. (0) | 2019.10.19 |
13. Python - 메모장 등으로 프로그램 코드 작성하기 (0) | 2019.10.01 |
댓글