3주차 함수(C++, C언어)
본문 바로가기
코딩공부/C++기초

3주차 함수(C++, C언어)

by 지누이야기 2024. 3. 29.
반응형

수학에서 함수는 X값을 넣었을 때 일정한 규칙에 의해서 값인 Y가 나오는 것을 말합니다. 

 

코딩에서도 마찬가지입니다.

 

동일한 알고리즘이 사용될 때 사용하는 것이 함수입니다.

 

만약 함수를 사용하지 않는다면 여러분들은 동일한 코드를 반복해서 써야 되고 코드는 길어질 수밖에 없습니다.

 

출력형 함수명 (매개변수들){
	실행문;}

 

이런 식으로 함수는 작성이 됩니다. 이제 함수를 사용할 때 알아두어야 될 점을 설명하겠습니다.

 

함수를 쓸 때 보통 메인함수 위에 프로토타입을 만들고 메인함수 뒤에 함수를 만들게 됩니다.

 

메인함수 위에 함수 안에 들어있는 실행문을 main함수 위에 쓰지 않는 이유는 하나의 코드를 자다 보면 너무 많은 함수들이 만들어지는데 그 함수들을 모두 main함수 위에다가 위치시킨다면 가독성이 떨어지게 됩니다.

 

두 번째로는 만약 프로토타입도 작성하지 않고, main함수 뒤에다가 함수를 선언한다면 컴파일 에러가 뜨게 됩니다.

컴퓨터는 위에서부터 아래로 코드를 읽기 시작하는데 위에 프로토타입 선언도 안 되있다면 함수를 실행을 하지를 못합니다!!

 

세 번째로 함수를 어떤 자료형으로 return 시킬지에 따라 함수의 출력형이 바뀌게 됩니다.

 

출력형이 무엇인지는 뒤에서 따로 설명을 하겠지만 간단히 설명하자면 출력하는 게 없다면 void를 사용하고, 정수를 출력하고 싶다면 int형을 사용하면 됩니다.

 

네 번째로 default argument를 설정해 둔다면 함수 호출을 할 때 인자를 전달하지 않아도 함수를 호출할 수 있습니다.

 

#include<iostream>

using namespace std;

void number(int a = 1, int b = 2, int c = 3) {
	cout << a + b + c << '\n';
}

int main() {
	int a=10;
	int b=5;
	int c = 3;
	number(a);
	number(a, b);
	number(a, b, c);
}

 

 

위의 결과를 보면 알 수 있겠지만 파라미터를 a하나만 받은 것은 number함수 안에서 a=10만 초기화를 시키고 b=2, c=3은 처음에 초기화된 상태로 있습니다.

 

이처럼 함수에서는 default로 초기화 시켜놓는것이 가능하고, 함수를 호출될 때 파라미터들의 초기화는 앞에 있는 파라밑터들부터 순서대로 초기화가 일어나게 됩니다.

 

다섯번째로 함수의 전달은 주소를 전달하는 것과 값을 전달하는 것 두 개가 있는데 각각의 장단점이 있습니다.

아직 래퍼런스를 설명하지 않았기 때문에 간단하게 설명을 하자면 모든 값들은 저장된 주소를 가지게 됩니다. 그 주소에 직접 접근하여 값을 바꾼다면 함수에서 return을 할 필요가 없습니다.

 

즉, 변수를 선언하고 초기화하고 return까지의 코드가 사라지므로 코드의 길이가 대폭 감소됩니다.

 

그러나 주소로 접근하게 될 경우 인지를 하지 못했는데 값이 바뀌어 버리는 상황이 발생할 수 있습니다. 그래서 const를 사용하는데 다음에 추가로 설명하도록 하겠습니다.

 

여섯번째로 함수 이름은 중복해서 사용이 가능합니다. 이를 함수 오버로딩이라고 합니다.

 

함수 오버로딩을 할 때 출력형이 고려되는 것이 아니라 인수에 기반하여 오버로딩이 된다. 그러므로 출력형이 달라도 인수가 없거나 같을 경우에는 오버로딩이 불가하고 에러가 뜨게 된다.

int getSum(){}
void getSum(){}

 

이를 실행하면 에러가 뜨게 된다.

 

그리고 1주차 때 문자는 숫자로 표현된다는 것을 배웠습니다.

 

그렇다면 인수의 자료형이 문자와 숫자인 같은 이름의 함수가 각각있는데 만약 숫자를 넣어주게 되면 어디에 들어갈까요? 

 

자료형이 숫자인 인수를 가지는 함수에 들어가게 됩니다.

 

그렇다면 문자를 받아야되는데 인수의 자료형에 char이 있는 함수가 없다면 어떻게 될까요?

 

char이 숫자로 승격(promotion)되어 int를 자료형으로 갖는 인수가 있는 함수로 들어가게 됩니다.

 

 

 

반응형

'코딩공부 > C++기초' 카테고리의 다른 글

3주차 switch문 (C언어, C++)  (0) 2024.03.29
2주차 while문과 do while문  (0) 2024.03.22
2주차 for문  (0) 2024.03.22
2주차 if문  (0) 2024.03.22
1주차 c++ 변수  (0) 2024.03.15

댓글