CHAPTER 6. 함수

 

6.1 함수의 역할

 

 

Def . 함수의 종류

  설명
표준함수 프로그램상 이미 정의 되어있는 함수
사용자 정의 함수 기능이 정의되어 있지 않아 사용자가 직접 정의한 함수
Main() 함수 프로그램 실행에서 프로그램의 시작과 끝을 담당하는 함수

함수를 사용하기 위해서는 해당 함수의 정보를 가진 헤더파일을 반드시 프로그램에 포함 시켜야 한다. Iostream.h에 표준함수가 포함 되어있다.

 

 

 

 

Def . 함수의 프로토 타입

  • 프로토 타입은 해당 함수 사용에 필요한 정보로 함수 입력 시 프로그램에서 나오는 말풍선이다.

 

 

 

프로토 타입의 구성

항복 의미 함수의 프로토타입에서
입력 여러 가지 입력 가능 매개변수
함수 함수를 구분하는 함수 이름 함수 이름
결과 함수는 주어진 기능을 수행하고 하나의 결괏값을 가져올수 있다. 이를 반환한다.’ 또는 반환값이라 한다. 그 이유는 함수의 마지막에 반환값을 알리는 명령이 return이어서 그대로 부르거나 해석해서 되돌린다 라고 부르기도 한다. 반환값

 

함수반환값 함수이름(매개변수,….)

함수 반환 값은 함수 실행 후 반환하는 값의 자료형을 의미, 만약 반환 값이 없으면 void로 표시

 

 

 

 

6.2 사용자 정의 함수          

  • 사용자 정의함수 작성 순서
    1. 함수에서의 작업 순서 결정 정의 내용 결정 )
    2. 프로토 타입 결정 리턴형, 함수 이름, 매개변수 )
    3. 함수 정의
    4. 함수 테스트

 

사용자 정의함수 예시

bool Caltime(const int sec, int& h, int& m, int& s)
{
           if (sec < 0)
                      return false;
 
           int sec1,sec2;
           h = sec / 3600;
           sec1 = sec % 3600;
           m = sec1 / 60;
           sec2 = sec1 % 60;
           s = sec2;
 
           cout << "입력한 시간 = " << h << "시" << m << "분" << s << "초"
           return true;
}

 

 

 

 

6.3 해더 파일 작성에서 전처리기 사용

  • 프로그램이 복잡해지면 하나의 헤더파일을 여러 번 참조하게 되는 경우 재정의로 인한 오류가 발생하게 된다. 이를 방지하기 위해 컴파일에서 해당 코드를 한번만 참조하게 하는 전처리기를 사용한다.
  • 헤더 파일 작성시 항상 ifndef 구문을 사용해서 오류를 방지하자

 

 

Def . ifdef 구문

형태
#ifdef AAA
{내용1}
#else
{내용2}
#endif
AAA가 define되어 있으면 즉 선언이 되어있으면 {내용1}을 수행 만약 선언 안 되어있으면 {내용2수행

 

Def . ifndef 구문

형태
#ifndef AAA
{내용1}
#else
{내용2}
#endif
AAA가 define되어 있으면 즉 선언이 되어있으면 {내용2}을 수행 만약 선언 안 되어있으면 {내용1수행

 

Ex. 헤더파일 작성 예시

#ifndef _해더파일 이름을 대문자로 표시_H_
#define _해더파일 이름을 대문자로 표시 _H_
{선언 내용}
#else
#endif
만약 example.h라는 헤더파일이 있으면 _EXAMPLE_H_ 로 표시후 선언할 내용을 #define _EXAMPLE_H_
여기에 적으면 됨

 

 

 

 

6.4 함수의 매개변수 전달

  • 함수 선언 시 필요한 매개변수를 선언한다. 이때 선언된 매개변수들은 main함수에서 선언된 변수들과 달리 따로 저장공간이 확보된다. 쉽게 생각하면 main 함수 내에서의 저장공간과 표준함수 또는 사용자 정의 함수의 저장공간은 분리 되어있다. 이러한 특징 때문에 매개변수를 입력하는 방법이 크게 두가지로 구분이 된다.
  • 함수내에 필요한 변수를 입력하는 방법은 크게 두가지이다. 전달 받은 매개변수를 변환 가능한 방법과 변환이 불가능한 방법.
  • 전달 받은 매개변수를 main함수 내에서도 값을 수정하는 방법은 Call by Reference 즉 주소를 입력하면 된다.
  • 전달 받은 매개변수를 main함수 내에서 값이 수정 안되게 하는 방법은 call by value 즉 값을 직접 전달하는 방법이다.

 

 

 

 

Def . Call by Value

  • 함수에 필요한 내용을 입력할 때 직접 main함수 내에 있는 변수에 저장되어 있는 값을 전달하는 방법이다.

 

EX

Int b=200
Example1(b);
Example1(999);
 
Int example1( int a )
{
Cout << a << Endl;
A=184;
}

Example 이라는 함수에 변수 b에 저장 되어있는 값을 전달하는 것과 직접 값을 입력한 예시이다.

이때 example함수 속 변수 a에 main함수의 변수 b의 내용 200이 전달되었고 a값이 함수 속에서 수정이 되었다. 이때 수정되는 것은 함수 속 a값이지 main함수의 b의 내용은 변하지 않는다.

 

 

 

 

Def . Call by Reference

  • 함수에 주소를 전달하여 입력된 매개변수를 참조할 수 있도록 하는 방법이다.
  • 이 방법에는 포인터 변수를 사용하는 방법과 레퍼런스 변수를 사용하는 방법 총 두가지가 있다.

 

 

EX1 ( 레퍼런스 변수 사용 )

Int example2( int &a )
{
 Cout << a << Endl;
 A = 200;
 Cout << a << Endl;
}
 
Int b=100;
Int &r_b=b;
 
Example2(r_b);

Example2 함수는 레퍼런스 변수를 매개변수로 사용한다 

즉 함수에 입력된 main함수의 변수를 수정하는 것이다.

 

 

포인터 변수를 사용하는 방법도 비슷한 과정이다.

EX2 ( 포인터 변수 사용 )

Int example3(int *a)
{
 Cout << *a << Endl;
 *a=200
 Cout << *a <
}
 
Int b=200;
Int *p=&b;
 
example3(&b) //= example3(p)

이것도 마찬가지로 매개변수를 포인터 변수로 지정했다. 그러므로 함수에 입력되는 내용은 변수의 주소이다. 그러므로 함수내에서 변수의 수정이 있으면 주소를 통해 main함수의 변수의 값을 수정하게 된다.

 

 

 

 

 

 

 

Def . 디폴트 매개변수

  • 함수에는 매개변수에 값이 입력이 되어야한다. 하지만 프로그래머가 함수의 매개변수의 초기 값을 설정하여 함수 호출에서 함수의 매개변수를 지정하지 않은 경우 해당 초기 값을 호출한 함수에서 사용할 수 있다.

 

형태

Int example1( int a =200 )
{
Cout << a << Endl;
A=184;
}

그저 그냥 함수의 프로토 타입에서 매개변수 선언 시 초기화를 해주면 된다.

이렇게 만들어 두면 만약 매개변수 입력을 안 하면 초기값을 불러와서 그 값을 입력한 것과 동일한 결과가 나온다.

 

 

 

 

6.5. 함수와 const의 활용

Def . const

  • 이는 기호 상수를 정의하는 예약어 이다. 함수 프로토 타입에서 매개변수 앞에 const를 적어주면 이는 함수 내에서 변수의 값이 변하지 않는다는 것을 의미한다.

 

  • 사용자 정의 함수 작성시 매개변수를 정하는 규칙
    1. 함수의 입력값으로 사용한다 ( const 지정 )
    2. 함수의 처리 결괏값이 함수 호출 후 사용된다. ( call by reference로 매개변수 할당 )
    3. 함수 반환값은 함수의 처리가 성공적으로 수행했는가를 나타내는 것이 편리하다. ( 성공시 0, 에러시 -1 )

 

 

6.6. 함수의 오버로딩

  • 함수 선언 시 만약 매개변수 또는 출력값의 변수만 다르고 함수의 내용은 같다면 우리는 함수의 이름을 계속 다르게 설정해야 하는 미련한 짓을 한다. 이를 방지하기위해 오버로딩 즉 중복 정의가 있다.
  • 프로그램 내에서 함수를 식별하는 항목은 총 3가지가 있다. 1. 함수 반환형 2. 함수 이름 3. 함수 매개변수 이 3가지중 하나라도 다르면 다른 함수가 된다.
  • 이러한 특징을 통해 프로그래머들은 함수 이름은 같게 설정 후 여러가지 자료형을 사용하는 함수 여러 개를 설정해 프로그래밍을 좀더 효율적이게 할 수 있다.

 

 

6.7. 구조체를 함수의 인수로 사용

  • 6.4의 매개변수 전달 내용에서 그냥 구조체 선언하고 매개변수를 구조체로 선언하면 끝..

+ Recent posts