동전이 자판기를 거치면 음료수가 된다. 요즘 동전이 잘 없는 것 같지만, 아무튼 그렇다. 종이가 프린터를 거쳐 나오면 인쇄물이 되고, 음가와 리듬이 악보 위에 그려지면 노래가 된다. 입력값에 따라 특정한 기능을 수행하여 결괏값을 출력하는 것을 함수라고 한다.
함수
수학 시간에 배웠던 함수도 x값이 함수를 거치면 y가 되는데 이를 y에 대한 함수라고 한다. x에 대한 y값의 변화를 관찰하기 위한 식을 함수라고 하는데, 영어로는 funtion, '기능'이라는 의미를 갖는다.
프로그램 안에서 입력된 문자열의 길이를 출력하는 부분이 반복적으로 필요하다고 해보자. 필요할 때마다 코드를 입력한다면 메인 코드가 길어지고 복잡해지고 입력하기도 번거로워진다. 반복적으로 필요한 특별한 기능이 있다면, 이를 내 입맛에 맞게 명령어로 만들어 필요할 때마다 불러오는 것이 훨씬 유리하다. 명령어를 내 입맛에 맞게 커스터마이징하는 것이 함수라고 생각하면 좋다.
함수를 사용하지 않을 때
중간고사 성적과 기말고사 성적 점수에 대해 각각 평균을 구하는 프로그램이 위와 같다고 해보자. 평균을 구하는 로직과 코드는 간단하지만 중간고사와 기말고사, 서로 다른 두 자료를 가지고 평균을 구하기 위해서는 동일한 코드를 두 번 작성해야 한다. 자료가 2개이기 때문에 두 번 반복했지만, 자료의 개수가 늘어난다면, 똑같은 코드를 훨씬 여러 번 작성해야 하는 것이다. 이를 함수를 사용하여 개선하면 아래와 같다.
함수를 사용할 때
개선하기 이전과 코드의 분량이 많이 차이나는 것 같지 않아보일 수 있다. 그러나 잘 살펴보면 훨씬 경제적인 코드라는 것을 알 수 있다. 위 프로그램에서 메인 코드는 7번~14번 줄이다. 그 중 11번 줄과 14번 줄의 avg()가 함수의 호출부인데, 이전에 반복적으로 작성하던 서너줄짜리 코드가 한 줄짜리 명령어가 된 것이다. 함수는 자료의 개수가 많아져 반복이 많이 필요할 때 진가를 발휘한다. 함수를 사용할 수 있다면 훨씬 경제적인 코드를 작성할 수 있게 된다.
함수의 정의 형식
함수의 내용을 작성하는 것을 함수의 정의, 또는 함수의 선언이라고 한다. 그 형식은 아래와 같다.
def 함수이름(매개변수):
명령어1
명령어2
...
함수를 정의할 때 지켜야 할 것들이 있다.
1. 함수의 이름과 매개변수의 이름은 이미 존재하는 키워드를 사용할 수 없다.
print를 색다른 출력문으로 만들고 싶어도 함수의 이름을 print로 작성하면 안 된다.
2. 함수의 내용은 들여쓰기 해야 한다.
def이하에 함수의 코드로 정의되는 명령어들은 들여쓰기로 def에 종속시켜줘야 한다.
3. 출력값 또는 반환값을 고려해야 한다.
메인코드로 돌려줘야 할 반환값이 있다면 return명령어로 돌려준다.
(참고로, 출력값도 입력값도 없는 함수도 만들 수 있다.)
4. 함수의 정의는 코드의 시작부분에 작성해야 한다.
함수는 호출되기 전에 반드시 정의되어 있어야 한다.
매개변수란?
변수는 변수인데 매개체가 되는 변수를 말한다. 메인코드에서 함수를 호출할 때 입력값을 넘겨주는데, 입력값이 매번 같지 않다. 위 평균을 구한 프로그램에서 입력값이 되었던 midterm과 final이 서로 다른 것처럼 말이다. 함수 안에서는 계산이 진행되는 동안 입력값이 사용되는 위치가 동일하지만 서로 다른 값을 이용하여 연산을 수행한다. 이를 매개체가 되는 변수라는 의미로 [매개변수]라고 한다. 위 코드에서는 avg()함수의 a가 매개변수이다.-
-매개변수는 함수에 별도로 선언되는 변수이다.
-메인코드에서 넘겨준 변수의 역할을 대신 수행한다.
함수부와 메인코드, 함수의 호출
함수부와 메인코드
코드는 함수부와 메인코드로 나뉜다고 할 수 있다. 메인코드에서 호출하는 함수가 정의되어 있지 않다면 오류가 발생한다. 그래서 코드의 앞머리에 메인코드에서 사용할 함수를 미리 정의하는데, 이를 함수부라고 한다. 여러 개 함수를 사용한다면, 함수부에 여러 함수의 정의를 차례로 작성하면 된다. 참고로, 함수끼리도 서로 호출할 수 있기 때문에, 호출이 선행되는 함수를 먼저 정의해야 한다.
함수의 호출
함수의 호출은 메인코드에서 일어난다. 10번 줄과 11번 줄에서 print 안쪽의 avg(midterm)과 avg(final)이 각각 함수의 호출이다. 10번 줄부터 함수를 호출하여 midterm을 avg함수의 a에 매개변수로 넘겨주면 이에 대한 연산을 수행한다. 함수의 연산을 수행한 결과 반환할 내용이 있다면 return 명령어를 이용하여 값을 돌려주는데, sum/len(a)를 반환하여 평균값을 출력한다. 11번 줄의 경우 final을 avg 함수에에 넘겨 동일한 연산을 수행한다.
'IT일반' 카테고리의 다른 글
파이썬 프로그래밍, 객체 지향 언어, 클래스 (0) | 2024.12.12 |
---|---|
파이썬 프로그래밍, 변수, 전역변수와 지역변수에 대하여 (0) | 2024.12.11 |
파이썬 프로그래밍 - 제어구조(6), 반복문, while, continue, 홀수 출력하기, 메뉴 화면 만들기 (1) | 2024.12.09 |
파이썬 프로그래밍 - 제어구조(5), 반복문, while, break, 구구단 출력하기, 소수 판별기 (1) | 2024.12.08 |
파이썬 프로그래밍 - 제어구조(4), 반복문, for, 최솟값 최댓값 구하기 (0) | 2024.12.07 |