Layer 7 05 과제 - 함수 보고서 작성

2019. 4. 7. 16:19layer7

오늘은 함수와 사용자 정의 함수에

대해 알아보겠습니다.

 

 

# 함수(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)

CODE 1

※ 함수명은 프로그래머 마음대로 선언하면 됩니다.
-이러한 함수의 본체를 "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 함수 위로 올라가서 함수를
실행하고, 다시 컴파일을 하며 내려와 함수를
호출한 부분으로 되돌아가는 것은 
가독성도 안 좋을뿐더러,
실행 속도의 많은 영향을 줍니다.

 

 

 함수의 원형만 main() 함수의 위에 선언하고 

    함수의 본체는 main() 함수 아래에 선언하는 방법 

 

- 이 방법은 함수 프로토 타입 선언이라고 하는데요. 

프로토 타입은 원형이라는 의미를 가지고 있는 영어 단어입니다.

 

선언하는 방법은 다음과 같습니다. 

 

바로 이렇게 말이죠!

 

# 함수 프로토타입 선언의 장점.
가독성이 좋아진다
. 실행 속도가 빨라진다.
. 대규모 프로그램 작성의 용이해진다.


# 프로토타입 선언을 할 시 주의할 점
. 함수의 리턴 값 혹은 인수가 
      프로토타입 선언과 일치하지 않으면
      컴파일 시 에러가 발생합니다.

.  함수 프로토타입 선언만 하고, 까먹고
      함수의 본체는 선언하지 않을 시 
      에러가 발생합니다. 

 

 

※ 함수 프로토 타입과 가인수, 실인수 등 함수 구조와 메모리 동작

   등을 조금 더 이해하고 싶으신 분들은 제 다른 블로그에서 

   잘 설명해두었으니 거기서 참고 해주시길 바랍니다.

 https://blog.naver.com/eheh1000/221377598860

# 여러 종류의 함수 

ㅁ.  입력값, 결괏값이 모두 있는 함수 

 

ㅁ.  입력값이 없고, 결괏값만 있는 함수 

실행 화면


ㅁ.  입력값만 있고, 결괏값이 없는 함수  

 

실행 화면

 


ㅁ.  입력값, 결괏값이  모두 없는 함수

 

실행 화면

 

 

긴 글 봐주셔서 감사합니다.