[파이썬 프로그래밍 11] 함수란 무엇인가?

Home / 파이썬 프로그래밍 / [파이썬 프로그래밍 11] 함수란 무엇인가?
함수란 무엇인가?

파이썬도 다른 프로그래밍 언어처럼 다른 사람들이 프로그래밍 해놓은 것을 쓸 수 있습니다.  보통은 함수라는 형식으로 씁니다. 지금까지의 자료에서 우리가 사용했던 print(…)라는 것도 일종의 함수 입니다. 다만 원래 파이썬에 기본으로 딸려오는 함수라는 점이 다른점입니다.

수학에서 말하는 함수는 들어가는 값이 있으면 나오는 값이 있습니다. 프로그래밍에서의 함수도 마찬가지로 들어가는 것이 있고, 나오는 것이 있습니다.

아래의 경우를 보죠.

a = -2
b = abs(a)
print(b)

abs라는 함수는 들어오는 값이 0이거나 0보다 큰 양수이면 그 값을 그대로 내보냅니다. 반면, 들어가는 값이 0보다 작은 음수이면 -1을 곱해 양수로 만들어 내보냅니다. 위의 코드에서는 a에 -2이 저장되어 있습니다. 음수인 이 값이 abs함수에 들어가면 -1이 곱해져 2가되어 나옵니다.

그런데  abs함수만 달랑 쓰면 함수가 내보내는 값은 다음 줄에서 사라집니다. 결과를 나중에 쓰려 한다면, = 기호를 써서 변수(저장장소)에 저장해야합니다.  위의 코드에서는 abs함수가 내보내는 값인 2를 = 기호를 써서 b라는 변수(저장장소)에 저장합니다.

세번째 줄에 쓴 print도 함수입니다. print는 화면에 프린트 하는 작업을 합니다. 하지만 나오는 값은 없습니다. 그래서 아래와 같이 쓰면 첫번째 줄은 b값을 화면에 출력하지만, 두번쨰 줄은 c에 아무것도 저장괸 것이 없다는 의미의 None 이 화면에 출력됩니다. (python 2.X에서는 에러 메시지를 내보냅니다)

c = print(b)
print(c)

한편, 들어가는 것 없이 쓰는 함수도 있습니다.

d = input()

input은 키보드로 치는 내용을 읽는 작업을 합니다. 이 함수가 내놓는 것은 읽은 내용입니다. 함수에 들어가는 내용이 없는 경우에는 위에서 처럼 괄호안에 아무것도 안쓰면 됩니다.

위의 코드를 실행하면 컴퓨터는 키보드로 입력하기를 기다립니다. 뭔가를 친 다음에 Enter키를 치면 input 함수는 Enter키를 치기 전까지 키보드에 친 내용 읽은 다음 그 내용을 그대로 내보냅니다. 위의 코드는 input함수가 키보드로부터 읽어 내보내는 내용을 d라는 변수(저장장소)에 저장합니다, 만약에 위의 코드를 생행하고 4.0을 입력하면 d에는 4.0이 저장됩니다.

input함수에 들어가는 것이 있을 수도 있습니다. 아래 코드를 보겠습니다.

e = input("텍스트를 입력하세요: ")

input함수에는 “텍스트를 입력하세요: “라는 텍스트가 들어갑니다. input은 이 텍스트를 화면에 출력한 다음, 키보드로 치는 내용을 읽어들이는 작업을 합니다. 그런 다음 input 함수는 읽어들인 내용을 내보냅니다. (python 2를 사용하는 경우에는 숫자가 아닌 텍스트를 입력하면 에러 메시지를 내보냅니다) 다시 말해 input이라는 함수는 들어가는 것이 있을 수도 있고 없을 수도 있다는 얘기입니다.

정리하면 함수가 하는 작업을 얘기하면 input은 키보드로 입력하는 내용을 읽어들이는 작업을 하고, print는 화면에 출력하는 작업을 합니다. 함수의 결과로 내보내는 것을 얘기하면 input은 키보드로 입력한 내용을 내보내고, print는 아무것도 내보내지 않습니다. 함수가 하는 작업과 내보내는 결과를 구분할 필요가 있습니다.

프로그램에서 입력과 출력이 매우 중요합니다. 파이썬에서 입력과 출력작업을 하는 대표적인 함수가 input과 print입니다. 이 함수들를 이용한 아래의 코드를 보겠습니다.

age = input("당신의 나이를 입력하세요: ")
if age <10 :
    print("당신은 애기나 어린이입니다.")
elif age < 20 :
    print("당신은 틴에이저입니다.")
else :
    print("당신은 어른입니다.")

python 2.x에서는 문제없이 실행되지만, python 3.x에서는 에러가 발생합니다. inout함수는 텍스트 형식으로 내보내기 때문입니다. 비록 키보드로 숫자를 쳐 넣었어도, 텍스트 형식으로 내보냅니다. 따라서 if 에서 텍스트를 숫자와 비교하게 되고 에러가 납니다. 이를 해결하려면 input을 쓴 다음줄에 텍스트를 정수(integer) 숫자로 바꿔주는 int함수를 써야합니다.

age = input("당신의 나이를 입력하세요: ")
age = int(age)
if age <10 :
    print("당신은 애기나 어린이입니다.") 
elif age < 20 : 
    print("당신은 틴에이저입니다.") 
else : 
    print("당신은 어른입니다.")

첫번째 줄은 “당신의 나이를 입력하세요: “라는 텍스트가 화면에 뜨면서 키보드로 입력하기를 기다립니다. 여러분의 나이에 해당하는 숫자를 치고 Enter키를 치면 age라는 변수(저장장소)에 저장합니다. 둘째 줄을 age에 저장된 텍스트를 정수(integer)숫자로 바꿔 저장합니다.

그 다음줄부터는 if를 그동안 공부했던 것과 약간 다른 방법을 사용합니다. elif라는 줄이 들어갔는데 이는 else와 if를 합친 것이라고 보면 되겠습니다. 두번째 줄에서 age<10이 참(True)이면 그다음줄인 세번째 줄 print(“당신은 애기나 어린이입니다.”) 작업을 합니다. 하지만 거짓(False)인 경우 이를 건너뛰고 elif 다음의 표현의 결과를 봅니다. 결과가 참이면 그 다음줄의 print(“당신은 틴에이저입니다.”) 작업을 하고, 결과가 거짓이면 이를 생략하고 else : 다음 줄의 작업을 합니다.

함수를 사용할줄 알아야 파이썬 프로그래밍을 제대로 사용할 수 있습니다. 우리가 생각할 수 있는 웬만한 기본적인 작업은 이미 다른 사람들이 함수로 쓸 수 있게 만들어 놓았습니다. 이를 잘 사용하면 복잡해질 수 있는 프로그래밍을 좀 더 간단하게 할 수 있습니다. 결국 다른 사람들이 만들어놓은 것을 잘 사용하는 것이 효율적인 프로그래밍의 관건이라는 얘기입니다.

물론 프로그래밍을 배우는 단계에서는 얘기가 달라집니다.  다른 사람들이 이미 프로그래밍 한 간단한 것을 따라해 보는 것이 필요합니다. 그래야 프로그래밍 실력향상에 도움이 되기 때문입니다. 프로그래밍을 처음 배울때 “남들이 이미 한 것이니까 나는 안 할거야 “라는 생각은 배우는데 독이 될 수도 있습니다.