-목차-
1. 함수 정의 vs 함수 원형
2. Interface vs Implementation
3. 변수 유효 범위, 지역변수 vs 전역변수
1. 함수 정의 vs 함수 선언
ret_type funct_name(arguments);
- 함수 호출에 필요한 정보는 알려주지만 함수가 어떻게 구현/실현되는지는 알 수 없다.
- C에서는 변수든 함수든 사용 전에 선언 또는 정의되어야하므로 함수 선언으로 함수 정의를 이동시켜 숨길 수 있다. 이는 크고 복잡한 일을 처리할 때 도움이 된다.
ex)
# include <stdio.h>
# define MY_PI 3.14
// Function Prototype
float square(float n);
float circle(float r);
int main(void)
{
float n = 2.5;
float y,z;
y = square(n);
z = circle(y);
printf("%f %f\n",y,z);
return 0;
}
// Function Definition
float square (float n)
{
return n*n;
}
float circle(float r)
{
return MY_PI*square(r);
}
2. Interface vs Implementation
- Interface는 자동차의 핸들과 엑셀과 같이 직접 사용하는 기기라면 Implementation은 엔진 작동 원리와 같은 작동 원리에 해당되는 부분이다.
- 함수(서비스)를 이용하는 입장에서는 Interface만 안다면 Implementation은 알 필요가 없다.
- Interfacte의 이해는 programming의 핵심이다. (사실 상 programming은 Interfacee끼리의 조립이다.)
+) Abstraction
- 주요 문제적인거(Interface)만 남기고 불필요한 것(Implementation)을 제거하여 일반화한 것이다.
+) Modular programming
- 여러 복잡한 함수를 C파일 하나에 넣는게 아니라 여러 개의 C파일에 나누어 사용할 수 있다. (divide & conquer)
ex) main.c
#include <stdio.h>
#include "mymath.c"
float square(float a);
float circle(float r);
int main(void)
{
float x = 2.5;
float y, z ;
y = square(x);
z = circle(x);
printf("%f, %f \n",y,z);
return 0;
}
mymath.c
# define MY_PI 3.14
float square(float a) {
return a*a;
}
float circle(float r) {
return MY_PI * square(r);
}
+) my_lib.h 와 같은 header 파일을 추가해 prototype을 작성하여 사용할 수 있다.
3. 변수 유효 범위, 지역 변수 vs 전역 변수
- 변수의 유효 범위란 어떤 변수를 사용할 수 있는 프로그램 내의 범위이다.
- 유효 범위를 두지 않는다면 변수 이름끼리 충돌이 일어나 프로그래밍 과정이 매우 복잡해진다.
- 변수의 선언 위치는 변수 유효범위 결정에 직접적 영향을 미친다.
# include <stdio.h>
int n = 10;
int main(void)
{
float x = 1.5;
printf("%d %f",n,x);
}
- 위와 같이 외부 영역에 선언된 변수는 프로그램이 끝날 때까지 전역 변수로서 사용된다.
- 지역변수는 함수 내부 영역에서 선언되어 블록 내부에서만 유효하다.
- 변수의 이름이 같더라도 유효 범위가 다르면 별도의 메모리 공간을 갖는다.
+) 변수 충돌
- 이름이 같은 변수들의 유효범위가 겹치는 상황이다.
- 변수 충돌 시 보다 가까운 위치에서 선언된 변수로 해석된다.
+) 전역변수의 활용
- 전역변수는 프로그램이 돌아가면서 이전 작접 정보를 기억하는 자동 변수이다.
- 전역변수를 사용하는건 딱히 좋은 습관은 아니다.
'CS > C, C++' 카테고리의 다른 글
[C/C++] 05-4 다양한 자료형과 자료 표현 - 연산자 (0) | 2021.10.03 |
---|---|
[C/C++] 05-3 다양한 자료형과 자료 표현 - 문자열 (0) | 2021.10.02 |
[C/C++] 05-2 다양한 자료형과 자료 표현 - 실수형 및 문자 (0) | 2021.09.30 |
[C/C++] 05-1 다양한 자료형과 자료 표현 - 정수형 (0) | 2021.09.29 |
[C/C++] 04-1 함수 개념과 호출 구조, 재귀 호출 (0) | 2021.09.25 |