이 포스팅은 Object Oriented Programming 시리즈 23 편 중 3 번째 글 입니다.

  • Part 1 - 01: Introduction
  • Part 2 - 02: Identifier, Variable, constant, Std IO, Operator
  • Part 3 - This Post
  • Part 4 - 04: Functions #2 - Local, Global Variable
  • Part 5 - 05: Functions #3 - Recursion Function, Reference Variable (재귀함수)
  • Part 6 - 06: Functions #4 - Reference Variable vs. Pointer
  • Part 7 - 07: Functions #5 - CallbyValue, CallbyReference
  • Part 8 - 08: Selection and Repetition
  • Part 9 - 09: File Input & Output (파일입출력)
  • Part 10 - 10: String library, rand(), srand()
  • Part 11 - 11: Pointer, Function Pointer
  • Part 12 - 12: Array, Vector (정적배열, 동적배열)
  • Part 13 - 13: class, object
  • Part 14 - 14: this, operator overloading
  • Part 15 - 15: friend, static, destructor
  • Part 16 - 16: Inherence (상속)
  • Part 17 - 17: Static Binding, Dynamic Binding, Header File
  • Part 18 - 18: Generic Programming, Template
  • Part 19 - 19: List Container
  • Part 20 - 20: Iterator (반복자)
  • Part 21 - 21: algorithm Library
  • Part 22 - 21: functional, lambda function
  • Part 23 - 22: Exception handling
▼ 목록 보기

함수의 기본 모양

수학에서의 함수와 같이, input , output 이 있고, input 이 들어갔을 때, 어떤 작업을 한 뒤, output 을 내보내는 방식으로 작동한다.

스크린샷 2019-03-18 오후 7 40 30함수

여기서는 input , output 에 아무 숫자나 넣어줘도 되지만, 컴퓨터는 이 숫자 자체도 명시적으로 써줘야 하기 때문에 어떤 input 이 들어가는지, 예상되는 output 은 어떤 녀석인지 명시적으로 써줄 필요가 있다.

Function in C++

int iSqrt(int p){		// #1
    return p * p;		// #2
}
  1. int p : input 파라미터의 자료형은 integer 이어야 한다.
    • int iSqrt : output 의 자료형은 integer 이다.
  2. 어떻게 작용하는지 적어주는 함수의 body 이다.

스크린샷 2019-03-18 오후 8 06 31함수의 구조

Input, output paramater

수학에서의 함수와 다르게 input , output 파라미터가 없을 수 있다.

input 파라미터가 없는 경우

#include <iostream>
int helloworld(void){
    cout << "hello world";
    return 0;
}

int main(){
    helloworld();
}
출력
// helloworld

output 파라미터가 없는 경우

#include <iostream>
void helloworld(void){
    cout << "helloworld";
}

int main(){
    helloworld();
}
출력
// helloworld

void 자료형은 window 운영체제에서만 가능하다.

Main 함수 안에서 사용

선언(Declare) , 정의(Define) , 호출(Calling) 의 세 과정을 거친다.

선언(Declare)

int iSqrt(int);
  • main 함수로 들어가기 전에, 먼저 함수의 반환형과, 파라미터의 자료형이 써진 함수의 원형(prototype) 을 적어준다. 변수 이름은 써 줄 필요없다.

정의(Define)

int iSqrt(int p){
return p \* p;
}
  • main 함수 밑에 어떻게 작용하는지 함수의 내용을 적어준다. 이때는 input 파라미터로 변수의 이름까지 적어줘야 사용가능하다.

호출(Calling)

y = iSqrt( x );
  • main 함수에서 불러서 사용한다. 함수를 돌리고난 반환값이 y에 저장된다.

전체코드 예제

# include <iostream>

using namespace std;

int sum(int a, int b);					// Declare

int main(){
    int x, y;
    cout << "x 입력" << endl;
    cin >> x;

    cout << "y 입력" << endl;
    cin >> y;

    cout << sum(x, y) << endl;			// Calling

    return 0;
}

int sum(int a, int b){					// Define
    return a + b;
}

Default Arguments

함수를 호출했을 때, 아무 인자도 넣지 않았다면, default로 파라미터를 넘길 수 있다. 선언할 때, 인자값까지 같이 전달하면 된다. 또한, input이 적게 들어왔을 경우, 앞 인자만 초기값으로 설정된다.

# include <iostream>

using namespace std;

int sum(int a, int b);					// Defalut Arguments

int main(){
    int x, y;
    cout << "x 입력" << endl;				// 8
    cin >> x;

    cout << "y 입력" << endl;				// 5
    cin >> y;

    cout << sum(x, y) << endl;			// 13
    cout << sum(x) << endl;				// 9
    cout << sum() << endl;				// 7

    return 0;
}

int sum(int a, int b){
    return a + b;
}

함수의 동작과정

#include <iostream>
#include <cmath>		// cmath 라이브러리 포함

using namespace std;

int main(){
    double value;

    // 변수 할당
    value = 16;

    // 루트 계산
    double root = sqrt(value);

    // 다른 값 계산 후 할당
    root = sqrt(100);
}

cmath 는 수학 함수들을 모아둔 표준 c++ 라이브러리 이다. 우리가 주 목적을 두는 함수는 main 함수이다. 이때, 다른 함수를 불러올때, 어떤 방법으로 실행되는지 그림으로 살펴보자. main 함수가 동작하다가, 중간에 sqrt 를 만나면 만들어둔 그 함수로 갔다가, 반환값을 다시 가져오고, 또 만나면 다시 갔다가 반환값을 가져오는 방식으로 동작한다.

cmath Library

#include <iostream>
  • 종류 스크린샷 2019-03-18 오후 8 05 10math library