2019. 4. 7. 16:19ㆍlayer7
오늘은 함수와 사용자 정의 함수에
대해 알아보겠습니다.
# 함수(Function)란?
독자: "무슨 소리인지 하나도 모르겠네...!"
필자: 저도 그렇게 생각합니다......
저의 식으로 함수를 정의해보자면....
# 함수(Function)란?
※ 아직 잘 이해가 가지 않으신다고요??
- 괜찮습니다. 사실 함수는 새로운 것이 아닙니다.
평소에 우리가 계속 쓰면서 자주 봐왔던 것이죠.
EX) main(), printf(), scanf(), scanf_s() 등이
"지금까지 저희가 써온 함수이기 때문입니다"
함수는 왜 쓸까요?
- 함수를 사용하면 특정 처리에 이름을 붙일 수 있어 코드의 가독성이 높아집니다.
- 함수를 사용하면 코드의 중복을 줄일 수 있습니다.
- 나중에 다른 프로젝트에서도 재사용이 가능합니다.
# 그렇다면 '사용자 정의 함수'란 무엇일까요??
- 사실 이러한 함수는 주변에서도 많이 볼 수 있습니다.
프로그래밍에서 함수는 수학에서의 함수와도 비슷한데요.
들어오는 값이 있으며(input), 나가는 값이 있습니다.(output)
※물론 꼭 있는 것은 아니며 둘 중 하나가 없거나,
둘 다 없는 경우도 있습니다.
# 프로그래밍에서의 함수
- 들어오는 값(Input) =="매개변수(인수)"
- 나가는 값(Output)=="return value"
위와 같이 부릅니다.
# 함수는 4가지 형태로 선언할 수 있습니다.
- 입력값, 결괏값이 모두 있는 함수
- 입력값이 없고, 결괏값만 있는 함수
- 입력값만 있고, 결괏값이 없는 함수
- 입력값, 결괏값이 모두 없는 함수
# 실전
# 함수의 정의 ★★★★★※인수를 '인수' 또는 '매개 변수'라고도 부릅니다.
# 리턴 타입이란?
'return'으로 돌려주는 값의 데이터형(data type)를 말합니다.
컴퓨터에게~
라고 말을 해주는 것입니다.
- 만약 돌려주는 값(return value)이 int형이라면 리턴 타입도 int형,
또는, 돌려주는 값이 double형이라면,
리턴 타입도 double형이 되는 거죠.
※ 'return' 은 뒤에서 좀 더 자세히 살펴보겠습니다.
# 함수 선언 방법(ex)
※ 함수명은 프로그래머 마음대로 선언하면 됩니다.
-이러한 함수의 본체를 "main() 함수" 위에 선언해주거나
함수의 원형만 main() 함수에 선언해주고
함수의 본체는 main() 함수 아래에 선언해주는 방법이 있습니다.
# 함수 호출
※ 물론 함수를 호출할 때는 위에서 우리가 선언한
정확한 함수명과, 매개변수의 개수가 맞아떨어져야 합니다.
- 그렇지 않으면 에러가 발생합니다.
# return
※리턴이란 말 그대로 돌려주는 것입니다.
(1) 무엇을 돌려주는 것일까요?
함수에는 매개변수(인수)와 반대로
" 함수를 호출한 곳에 내부의 정보를 전달하는 "
기능이 있습니다.
함수가 돌려주는 정보(값)를 " 리턴 값 "이라고 합니다.
(2) 특징
- 인수는 여러 개 넘길 수 있었지만,
함수는 "단 하나의 값"만 함수를 호출한 곳에
리턴(return) 할 수 있습니다.
(3) 특징
- 호출된 함수는 return을 만나거나
함수의 '}'(닫는 중괄호)를 만난다면
함수가 종료됩니다.
(4) 특징
- 리턴 값은 변수에 담아서 사용하거나, 바로 출력해야 합니다.
# 여러 가지 함수의 선언 방법
- 함수를 사용하기 전 선언하여 사용하는 형태
- 함수의 원형만 main() 함수의 위에 선언하고 함수의 본체는 main() 함수 아래에 선언하는 방법
저는 이 두 가지 방법 중 두 번째 방법을 지향합니다.
1. 함수를 사용하기 전 선언하여 사용하는 형태
main() 함수 위에 sum()이라는 입력받는 두 숫자를 더하는 함수를 만들었습니다.
이 방법 되게 간편하고 좋은데요. 조금의 단점이 있습니다.
- 단점
1. 함수가 많아질 경우 가독성이
안 좋아진다. 2.
실행 속도가 느려진다.
또한 가독성의 문제가 있습니다.
위와 같은 코드가 한두 개 있는 정도는 상관없지만
여러 개라면 어떨까요?
어디 가 main() 함수인지 한눈에 들어오지 않고, 굉장히 복잡해집니다.
또한, c언어는 절차 지향 언어입니다.
c언어는 실행 시 가장 먼저 main() 함수를 찾아 컴파일을 실행합니다.
① 호출된 함수는 return을 만나거나
함수의 " } "을 만나면
② 함수를 호출한 곳으로 돌아간다. ↓
③ return 값이 있으면
return 값을 가지고 되돌아간다.
(2) 문제가 발생합니다.! 저렇게
컴파일을 하는 main 함수 위로 올라가서 함수를
실행하고, 다시 컴파일을 하며 내려와 함수를
호출한 부분으로 되돌아가는 것은
가독성도 안 좋을뿐더러,
실행 속도의 많은 영향을 줍니다.
2 함수의 원형만 main() 함수의 위에 선언하고
함수의 본체는 main() 함수 아래에 선언하는 방법
- 이 방법은 함수 프로토 타입 선언이라고 하는데요.
프로토 타입은 원형이라는 의미를 가지고 있는 영어 단어입니다.
선언하는 방법은 다음과 같습니다.
바로 이렇게 말이죠!
# 함수 프로토타입 선언의 장점.
ㅁ 가독성이 좋아진다
ㅁ. 실행 속도가 빨라진다.
ㅁ. 대규모 프로그램 작성의 용이해진다.
# 프로토타입 선언을 할 시 주의할 점
①. 함수의 리턴 값 혹은 인수가
프로토타입 선언과 일치하지 않으면
컴파일 시 에러가 발생합니다.
②. 함수 프로토타입 선언만 하고, 까먹고
함수의 본체는 선언하지 않을 시
에러가 발생합니다.
※ 함수 프로토 타입과 가인수, 실인수 등 함수 구조와 메모리 동작
등을 조금 더 이해하고 싶으신 분들은 제 다른 블로그에서
잘 설명해두었으니 거기서 참고 해주시길 바랍니다.
https://blog.naver.com/eheh1000/221377598860
# 여러 종류의 함수
ㅁ. 입력값, 결괏값이 모두 있는 함수
ㅁ. 입력값이 없고, 결괏값만 있는 함수
ㅁ. 입력값만 있고, 결괏값이 없는 함수
ㅁ. 입력값, 결괏값이 모두 없는 함수
긴 글 봐주셔서 감사합니다.
'layer7' 카테고리의 다른 글
Layer 7 07 과제 - 달팽이 배열 (0) | 2019.04.10 |
---|---|
Layer 7 06 과제 -포인터 보고서 (0) | 2019.04.07 |
Layer 7 과제 04 코드업 기초 100제 풀기 (0) | 2019.04.03 |
Layer 7 03-1 과제 (배열 보고서 작성) (1) | 2019.03.31 |
Layer 7 03 과제 (0) | 2019.03.31 |