2015. 11. 15. 22:04ㆍ왕초보를 위한 빠르게 훑어보는 파이썬
안녕하세요.
어느덧, 왕초보를 위한 빠르게 훑어보는 파이썬 강좌 마지막이네요.
오늘 알려드릴 부분은 "함수"인데요, 여기까지 내용을 이해하시면,
프로그래밍에서 말하는 가~~~~장 기초적인 내용은 마스터 하시는거에요.
말 그대로 기초이기 때문에, 여기까지 마스터했다고 대단한 프로그램을 만들순 없어요.
아직 더 배워야 할 것들이 많이 있기 때문이죠.
하지만, 이제 프로그래밍이 뭔지 감은 잡았다. Python(파이썬)이 대충 뭔지는 알겠다. 정도는 말해도 되는 정도에요.
이러한 기초를 바탕으로, 추가적인 내용은 다른 강좌를 보셔도 되고요, 책을 한 권 구입하셔서 정독하셔도 좋아요.
파이썬 강의가 잘 구성되어 있는 블로그/교육서비스 몇 가지 소개해 드리면서, 이번 강좌 시작해볼게요.
파이썬 강좌 블로그
파이썬을 알려주는 강의 사이트
함수란?
우리는 초, 중,고등학교때 수학시간에 "함수"에 대해서 배운적이 있습니다. 기억나시죠?
1차 함수, 2차 함수 뭐 이런것들요.
<초등학교때의 함수>
<중, 고등학교때의 함수>
우리가 그동안 배운 함수는 x에 5를 입력하면 함수의 수식에 따라, y의 값이 정해지는 이런거였는데요.
프로그래밍에서의 함수는 어떤 것일까요?
프로그래밍에서의 함수도 수학의 함수와 동일합니다.
(1)입력을 받는 부분이 있고요, 함수 (2)내부에는 어떤 동작이 구현되어 있고요, 동작 (3)결과를 출력하는 부분이 있습니다.
그래서 함수는 어떤 입력을 받아서, 미리 정의된 동작을 수행하고, 그 수행 결과를 출력하는 역할을 담당하게 될거에요.
자 그럼 함수가 뭔지 어렴풋이 알겠는데,
(1) 함수는 문법구조가 어떻게 되는지
(2) 언제 어떤 용도로 사용하는지
알아보겠습니다.
함수의 문법
함수의 문법형태를 먼저 보여드리겠습니다.
# 함수의 정의(구현부)
def 함수이름(입력#1, 입력#2, ... , 입력#N) :
함수 구현 #1
함수 구현 #2
함수 구현 #3
return 결과값
# 함수의 호출(사용하는 부분)
결과값을 저장할 변수 = 함수이름( 인자#1, 인자#2, ... , 인자#3 )
위 함수 문법에서 알 수 있듯이, 함수는 구현부분이 있고, 구현된 함수를 호출하는(=사용하는) 부분이 있습니다.
함수의 구현부
함수는 def 라는 키워드로 시작하고, 그 다음으로는 함수 이름을 입력합니다.
함수 이름 옆에는 함수로 전달될 인자값을 순서대로 쭉 명시하게 됩니다.(입력#1~입력#N)
그리고 다음 라인부터는 함수의 내부 동작을 명시하는 부분으로써, 들여쓰기가 일정해야 합니다.
그리고 마지막에는 함수에서 정의한 대로 쭉 실행을 하고, 함수의 결과값을 반환하는 부분을 구현하게 됩니다.
이때, 함수의 결과값은 반환해도 되고, 반환하지 않아도 됩니다. 만약에 반환부분을 따로 명시하지 않으면, null 값이 반환됩니다.
null 이 뭔가요?
"null" 은 python에서 "이도 저도 아닌 아무 것도 아닌 값" 을 의미합니다.
여러분이 결과값을 반환하지 않겠다고 프로그램을 작성했으니, python은 내부적으로 아무 것도 아닌 값(null)을 반환하여 호출한 쪽에서 "반환된 값이 아무것도 없구나" 라는 것을 알 수 있게끔 해주는 것이죠.
함수의 호출부
호출부는 구현부에 비해 훨씬 간단합니다.
실행시키고 싶은 함수 이름을 적고, 그 뒤에 괄호를 적습니다.
괄호 안에는 실행시킬 함수에 전달할 인자들을 순서대로 쭉 명시합니다.
이렇게하면, 함수가 호출이(=실행이) 됩니다.
근데, 함수는 결과값을 반환한다고 했죠?
함수가 반환하는 결과값을 받아서 뭔가 처리하고 싶으면, 함수 왼쪽에 반환된 결과값을 저장할 변수를 적고 "=" 을 붙이면 됩니다.
문법을 알려드렸지만, 솔직히 사용해보지 않고선 딱히.. 감도 잘 안오고 이게 뭐가 좋은건가 싶기도 하고,
왜 쓰는지도 모르겠고, 언제 사용해야 하는지도 모르겠고 그렇습니다.
문법만 가지고선 아무것도 할수 없어요. 문법을 바탕으로 실제 사용을 해보면 금방 감이 옵니다.
자 다음으로는 함수를 실제로 사용해보고, 프로그래밍할때 함수가 왜 필요한지 알려드리겠습니다.
문법을 모르면 아예 함수 예제를 이해할 수 조차 없을테니 미리 설명해드린거에요.
예제를 보고 어떻게 동작되는지 모르면, 문법 부분으로 다시 돌아와서 참고하면서 보세요.
함수의 사용예제 분석
실제 제가 함수를 실행한 예제를 하나 보여드릴게요.
hitting_avg 라는 함수를 만들었습니다.
함수라는 것을 컴퓨터에게 알려주기 위해 "def" 로 시작했고, 뒤에 함수 이름 "hitting_avg"를 적었습니다.
그 뒤에는 함수의 입력으로 선수의 이름, 타수, 안타갯수를 전달받도록 괄호안에 순서대로 적었습니다. 마지막은 ":"으로 끝나고요.
다음줄부터는 함수의 구현 부분입니다. 함수의 정의부분과 구분하기 위해 들여쓰기(스페이스 4칸)를 사용했고요,
정의부는 모두 동일하게 스페이스 4칸으로 들여쓰기 된 모습을 볼 수 있습니다.
첫줄에는 타율을 계산하고 있습니다. ( float 가 뭘까요? 숫자형은 내부적으로 정수형, 실수형, 복소수형 등등으로 나뉘어집니다. 입력받은 타수와 안타갯수는 정수형인데, 타율은 실수형으로 출력되어야 해서 형을 변환해준거에요. 일단 그냥 그렇구나 하고 넘어가세요. 내용 흐름상 저 부분이 중요한 것은 아닙니다 )
그 다음줄에는 선수이름과 타율을 출력하도록 print함수가 있고요, 마지막줄에는 계산된 타율을 반환해주고 있습니다.
이렇게 함수가 완성되었습니다.
함수가 완성되었다고 해서, 당장 함수가 어떻게 실행되거나 하진 않아요.
함수는 누군가 호출을 해줘야만 실행이 됩니다.
그래서 그 바로밑에서 hitting_avg("추신수", 5, 3) 으로 함수를 호출을 했습니다.
그랬더니, 바로 밑에 파랑색글자로 추신수선수의 타율은 0.6입니다 라는 print함수를 실행한 결과가 보이네요
입력을 "이종범", 10타수, 3안타로 바꿨더니, 결과가 이종범선수의 타율은 0.3입니다 가 나왔네요.
근데 이번에는 함수 앞에 hit_rate_lee = 부분이 있습니다. 이 부분이 함수를 실행 후, 반환하는 값을 hit_rate_lee 라는 변수에
저장을 하라는 의미가 되는거에요.
함수 마지막 줄에서 return hit_rate 했죠? 이때 hit_rate 의 값이 함수를 호출한 부분에 있는 hit_rate_lee 의 변수에 전달이 됩니다.
최대한 상세하게 설명드렸는데, 혹시 이해안되는 부분이 있다면 꼭 댓글 남겨주세요. 보완해서 추가 설명해 드리겠습니다.
함수가 필요한 이유
아래와 같은 내용을 프로그래밍 해야 한다고 가정해볼게요.
제가 사회인 야구를 하고 있는데요.
우리 팀 선수들의 타수와 안타갯수 정보를 가지고 있습니다.
이때 우리 팀 모든 선수들의 타율을 구해서 출력하는 프로그램을 작성하고 싶어요.
이러한 경우, 아래와 같이 프로그래밍을 하면.....됩니다. 네, 되요. 정상적으로 동작할 겁니다.
선수1의 이름과, 타수, 안타갯수, 타율을 변수에 저장한다.
타율=안타갯수/타수
선수1의 이름과 타율을 출력
선수2의 이름과, 타수, 안타갯수, 타율을 변수에 저장한다.
타율=안타갯수/타수
선수2의 이름과 타율을 출력
...
선수100의 이름과, 타수, 안타갯수, 타율을 변수에 저장한다.
타율=안타갯수/타수
선수100의 이름과 타율을 출력
근데 이런식으로 프로그램을 작성하면 몇가지 중대한 문제가 발생합니다.
만약, 선수이름과 타율 순서가 아니라, 타율과 선수이름을 출력하고 싶어졌다면?
또는, 타율과 함께 안타갯수도 출력하고 싶어졌다면?
선수 100명에 대해서 모두 다 일일이 사람이 수정을 해줘야 합니다.
행여나, 오타라도 하나 발생한다면, 그걸 찾느라 또 고생을 해야겠죠.
따라서 이렇게 프로그래밍 하는 것은 여러가지 측면에서 매우 좋지 않습니다.
- 프로그램을 해석하는데, 보기 안좋다. ( 어차피 다 같은 내용인데, 길게.... 쭉 반복해서 적혀있으니깐요 )
- 구현해야 하는 부분이 약간이라도 변경되면 고쳐야 하는 곳(라인)이 너무 많다.
이런 저런 문제로 이러한 방식으로 프로그래밍을 하면 안됩니다.
따라서, 이렇게 동일한 동작을 지속적/반복적으로 수행하는 경우에는 "함수"를 사용해야 합니다.
"함수"를 사용하여 다시 작성해볼까요.
# 타율을 계산/출력할 함수를 미리 정의한다.
def 타율을 계산하는 함수( 선수이름, 타수, 안타갯수 ) :
타율 = 안타갯수/타수
선수이름과 타율을 출력
타율을 계산하는 함수(선수1이름, 선수1타수, 선수1안타갯수)
타율을 계산하는 함수(선수2이름, 선수2타수, 선수2안타갯수)
...
타율을 계산하는 함수(선수100이름, 선수100타수, 선수100안타갯수)
자 이렇게 함수를 사용했더니, 동일한 동작을 하는 프로그램인데도, 라인이 많이 줄어서 보기가 좋죠? 한 화면에 다 보일뿐더러, 정리가 잘 되어 있어서 어떤 동작을 하는것인지 쉽게 이해가 됩니다.
또한 출력부분을 좀 변경하고 싶다고 하더라도 변경이 어렵지 않습니다.
함수 구현부분만 약간 변경하면 함수를 호출하는 부분은 전혀 변경하지 않아도, 변경된 출력문이 일괄 적용이 됩니다. 왜냐면 함수를 호출하고 있으니깐, 함수의 내용이 변경되면 일괄 적용이 되는것이죠.
어떠신가요. 함수가 왜 필요한지 이해되세요?
마무리
자, 여기까지 제가 생각하기에 python에서 가장 기초라고 생각되는 모든 부분을 다루어 보았습니다.
단숨에 python의 변수,자료형,조건문,반복문,함수까지 훑어보았는데요,
python 프로그래밍 언어가 어떻게 느껴지시나요?
대부분은 "아직은 잘..." 이라고 대답하실 것 같아요.
열심히 강좌를 올렸는데, 이런 feedback 이 오면 정말 힘빠집니다만, 저런 대답이 나오는게 전 당연하다고 생각해요.
살짝 훑어보기만 했을뿐인데, "와!!! 대박!!! 이거 꼭 제대로 배워봐야겠다!!!" 이런 반응을 기대할 순 없죠.
전 그냥 이번 강좌의 컨셉은 말 그대로 프로그래밍을 처음 하시는 분들을 위한 python 빠르게 훑어보기 였기 때문에,
"음 머 대충..python이란 이런거네?" 정도의 느낌이 생기셨다면 그걸로 만족합니다. 정말이에요.
무슨일이든 두팔 걷고 본격적으로 달리기 위해서는 약간의 준비운동이 필요합니다.
이번 강좌에서는 개념적인 설명 및 프로그래밍 전반적인 내용에 많은 부분을 할애하다보니, python문법 디테일이나, 다양한 용법은 충분히 설명을 못 드렸던것 같아요. 이번 강좌라 입문 Level.1 코스였다면 다음강좌는 입문 Level.2 코스가 되겠네요.
그 강좌에서는 대부분의 문법을 모두 자세하게 설명드릴거고요, 다양한 용법도 알려드릴까 합니다. 많은 관심 부탁드립니다.
제가 프로그램을 배울때만 해도, 프로그래밍의 시작은 "C" 였습니다. ( 요즘도 그런진 잘 모르겠네요 )
근데 해보시면 아시겠지만, 아무것도 모르는 사람이 "C"를 배우기란 정말 어렵습니다.
하지만 python은 쉬워요. 정말 쉽습니다. 그래서 세계 많은 나라에서 프로그래밍 처음 가르칠 때 python으로 하는 곳들이 많아요. 우리나라도 SW코딩 교육의 중요성을 느끼고, 어렸을때 부터 프로그래밍을 가르치려고 합니다. 저는 개인적으로 python으로 했으면 좋겠어요. 여러분들도 이런 세계적인 트렌드에 동참하셔서 배우기 쉬운 프로그래밍 언어인 python 하나쯤은 본인것으로 만들어보시길 강력 추천합니다.
'왕초보를 위한 빠르게 훑어보는 파이썬' 카테고리의 다른 글
5.수많은 반복작업, 어떻게 해야할까? (Python 반복문) (4) | 2015.11.15 |
---|---|
4.이럴땐 이렇게, 저럴땐 저렇게 (Python 조건문) (1) | 2015.11.11 |
3.내 물건 좀 보관해줄래? (Python 변수) (7) | 2015.10.23 |
2.Python 첫 만남 (0) | 2015.10.22 |
1.프로그램이 뭐지? (3) | 2015.10.18 |