안녕하세요 넬다이입니다
오늘은 14일 차 정리시간이 되겠는데요 오늘 배워볼 내용은 함수의 사용입니다.
함수란 기능을 뜻하는데요 프로그램에 있는 기능 하나하나를 함수로써 구현을 하는 방법 이를 통해서 재사용성을 늘려주는데 오늘은 그 기본이 되는 함수에 대해서 배워보도록 하겠습니다.
함수란
함수는 어떤 기능을 수행하도록 만든다.
함수의 장점이라면 코드의 재사용성이 있다.
함수를 잘 구현을 한다면 여러 번 중복 정의할 필요 없이 코드 내의 중복되는 규칙이나 코드들을 줄일 수 있다.
컴파일러가 제공해주는 함수도 있고 우리가 직접 만드는 함수도 있다.
우리가 만드는 함수를 사용자 정의 함수라고 부른다.
함수를 사용하기 위해서는 함수의 원형과 정의를 제공해야 한다.
함수를 선언을 하고, 구현을 한다.
함수는 크게 3 부분으로 나눈다
반환 타입(리턴형), 함수명(함수 주소), 매개변수(인자, 파라미터)이다.
#include <iostream>
using namespace std;
//선언
//리턴형도 없고 매개변수도 없는 함수
void Render(void);
void main()
{
Render();
}
//정의
void Render(void)
{
cout << "Render 함수가 호출되었습니다." << endl;
}
위 구문은 void Render를 정의하고 그를 main 위에 선언하고 main에서 사용하는 구문이다.
혹 여러분들은 왜 정의를 아래 했는데 선언을 해야 하는지 궁금하신 분들도 있으실 텐데
프로그램 언어는 순차 지향적인 언어입니다.
그렇기 때문에 정의 부분 전체가 선언 부분 위치로 이동을 하게 되면은 따로 선언은 하지 않아도 되는데요
지금과 같이 정의 구문이 main 아래 있게 된다면은 Render(); 이를 통해서 함수를 호출한다고 하더라도
Render를 아직 코드에서는 모르는 상태이기 때문에 선언을 통해서 이런 구문이 있어!
라고 알려주는 역할을 하게 됩니다.
#include <iostream>
using namespace std;
//선언
//리턴형도 없고 매개변수도 없는 함수
void Render(void);
//리턴형은 있지만 매개변수가 없는 함수.
int Test(void);
//리턴형은 없고 매개변수만 한 개 존재하는 함수.
void Test2(int iA);
//리턴형이 있고 매개변수가 2개인 함수
int Sum(int iA, int iB);
void main()
{
Render();
cout << Test() << endl;
Test2(10);
cout << Sum(1 , 5) << endl;
}
//정의
void Render(void)
{
cout << "Render 함수가 호출되었습니다." << endl;
}
int Test(void)
{
cout << "Test 함수가 호출되었습니다." << endl;
return 10;
}
void Test2(int iA)
{
cout << "Test 2 함수가 호출되었습니다. 매개변수로 iA : " << iA << "값이 들어옴" << endl;
}
int Sum(int iA, int iB)
{
return iA + iB;
}
위에 코드와 같이 함수에는 여러 종류가 있는데요
함수에는
리턴형도 없고 매개변수도 없는 함수
리턴형은 있지만 매개변수가 없는 함수
리턴형은 없고 매게 변수만 존재하는 함수
리턴형은 있고 매게 변수가 존재하는 함수
여러 가지 형태의 함수들이 있는 것을 알아두어야 합니다.
#include <iostream>
using namespace std;
//디폴트 전달 인자를 갖는 함수..
int Multiple(int iA, int iB = 1, int iC = 1, int iD = 1);
//int Multiple(int iA, int iB = 1, int iC, int iD);
//중간에 매개변수가 한 개라도 디폴트 전달인자를 사용했다면
//뒤따라오는 모든 매개변수들을 디폴트 전달 인자를 사용해야 한다는 강제성을 띄게 된다.
void main()
{
cout << Multiple(10, 20, 30, 40) << endl;
cout << Multiple(10, 20, 30) << endl;
cout << Multiple(10, 20) << endl;
cout << Multiple(10) << endl;
}
int Multiple(int iA, int iB, int iC, int iD)
{
return iA * iB * iC * iD;
}
매개변수의 개수를 맞춰 줘야 함수를 호출할 수 있었는데 그렇게 하지 않고서도 함수를 호출할 수 있는 문법이
디폴트 매개변수, 전달 인자, 시그니쳐, 파라미터, 세그먼트라고 한다.
위에도 언급했다시피
int Multiple(int iA, int iB = 1, int iC, int iD);
중간에 매개변수가 한 개라도 디폴트 전달 인자를 사용했다면 뒤따라오는 모든 매개변수들을 디폴트 전달 인자를
사용해야 한다는 강제성을 띄게 된다.
함수 오버 로딩
#include <iostream>
using namespace std;
int Sum(int iA, int iB);
float Sum(float fA, float fB);
void main()
{
int iA = 10;
int iB = 20;
cout << Sum(iA, iB) << endl;
float fA = 10.4f;
float fB = 20.7f;
cout << Sum(fA, fB) << endl;
}
int Sum(int iA, int iB)
{
return iA + iB;
}
float Sum(float fA, float fB)
{
return fA + fB;
}
매개변수를 통해 호출되어야 할 함수를 찾아서 해당되는 함수를 호출하게 한다.
int iA , iB를 사용한 Sum은 int Sum(int iA , iB)라는 함수를 자동으로 찾아가며
fA와 fB를 사용한 Sum은 float Sum(float fA , float fB)라는 함수를 자동으로 찾아갑니다.
이를 통해서 같은 이름에 다른 형태에 매개변수를 통해서 다양한 활용이 가능합니다.
#include <iostream>
using namespace std;
//선언과 정의를 동시에 한 형태.
void Plus(int iTest)
{
iTest += 10;
}
void Plus2(int* pTest)
{
(*pTest) += 10;
}
void main()
{
int iTest = 0;
Plus(iTest);
cout << iTest << endl;
Plus2(&iTest);
cout << iTest << endl;
}
이렇듯 매개변수에 포인터를 넣어서 값을 직접 변경하는 방법 또한 가능합니다.
이는 포인터의 활용을 어떻게 하느냐의 따라서 다양한 문법이 있는데 지속적으로 배워보도록 하겠습니다.
팁.
함수 이름은 해당 함수의 주소이다.
함수 실행 순서는 컴퓨터가 순차적으로 명령을 수행하다가 함수 호출을 만나게 되면, 함수의 정의를 찾아서
해당 함수가 있는 메모리 공간으로 점프를 해서 함수 내부의 처리를 수행한 다음에 다시 이전 위치로 돌아오는 것임.
과정 중에 함수 포인터와 함수 객체를 사용하게 되는데 그때 더 자세한 부분을 배울 수 있을 것입니다.
[개발/C&C++] - (C/C++ 속성 정리) 13일 차 : typedef , 구조체
[개발/C&C++] - (C/C++ 속성 정리) 12일 차 : string 컨테이너
[개발/C&C++] - (C/C++ 속성 정리) 11일 차 : 문자열 및 문자열 함수
[개발/C&C++] - (C/C++ 속성 정리) 10일 차 : 포인터 심화 및 2차원 배열
'개발 > C&C++' 카테고리의 다른 글
(C/C++ 속성 정리) 18일 차 : 리스트를 이용해서 성적표 만들기 및 설계 (0) | 2020.07.08 |
---|---|
(C/C++ 속성 정리) 17일 차 : 성적표 만들기 및 설계 (0) | 2020.07.07 |
(C/C++ 속성 정리) 16일 차 : 메모리 관련 함수 (0) | 2020.07.06 |
(C/C++ 속성 정리) 15일 차 : 포인터와 동적할당 (0) | 2020.07.05 |
(C/C++ 속성 정리) 13일 차 : typedef , 구조체 (0) | 2020.07.03 |
(C/C++ 속성 정리) 12일 차 : string 컨테이너 (0) | 2020.07.02 |
(C/C++ 속성 정리) 11일 차 : 문자열 및 문자열 함수 (0) | 2020.07.01 |
(C/C++ 속성 정리) 10일 차 : 포인터 심화 및 2차원 배열 (0) | 2020.06.29 |