정적 함수 :
-> static 함수: 전역 함수로 취급 되지만, 선언된 영역에서만 호출 가능하다.
# static 함수는 소스 코드 내에서 은페성을 높이기 위해 매우 중요한 요소이다.
# static 을 붙이면 해당 함수의 접근은 해당 파일 내로 제한한다.
즉 그 파일 내에서만 통용되는 완전한 로컬 함수로 취급 할수있다
단점 : 다른 파일과 함수명의 충돌이 있을지 걱정하지 않아도 된다.
다른 파일 에서는 그 함수를 호출하지 않는것이 보장된다.
-> 클래스의 멤버 함수로의 static 함수
* 실제로 클래스의 멤버 함수가 아니라 전역 함수이지만 그 클래스의 영역 내에서만 사용 가능
* 전역 함수이므로 클래스의 인스턴스를 생성하지 않고 호출 할수있다.
-> 주의 사항
* 선언된 클래스의 다른 멤버 변수나 멤버 함수를 직접 호출 할수없다.
* 그러기 위해서는 클래스 인스턴스를 함수가 전달 받아야 한다.
전역 extern
-> 함수 에 extern 을 붙여주면 외부 에 공개 즉 다른 파일 내에서 접근 허용 가능 하다
: 만약 다른 소스 파일에서 어떤 함수를 호출 하려고 할때, 해당 파일 내에서는
함수의 형식 ( 인자와 반환 형식)을 알고 있어야 되는데 이때 extern 을 붙여주면 된다.
: 함수의 경우에는 default 로 전역 함수가 되므로 extern 은 생략 해도 된다.
변수의 경우 static 과 extern
static :
-> 변수의 경우에도 함수와 마찬가지로 파일 외부로 공개 유무에 따라서 static 또는 extern 을
사용한다
하지만함수에서 사용할때와는 조금 차이가난다.
-> 함수 내부에서 static 을 사용했을경우 범위는 함수안에서만 유효범위가 된다.
: 함수 외부에서의 접근은 거부된다.
: 외부에서 접근 제한되므로 Get/Set 함수를 통해서 해당 변수를 제어한다(보통)
extern:
-> extern 을 선언 함으로써 다른 파일에서 정의된변수의 형식을 컴파일러에게 알려줄수있다.
-> extern 을 붙여주어서 외부에 선언된 변수가 있다는것을 알릴수있다.
: 하지만 해당 변수에 static형 일경우에는 해당 변수를 발견할수없다는 메시지와 함께 에러 발생
요약:
변수
static : 변수 정의(파일 외부에 공개하지 않는다)
static 없을경우 : 변수 정의 (파일 외부에 공개한다.)
extern : 변수 선언(정의는 없다)
함수 정의
static : 파일 외부에 공개하지않는다.
static 없을 경우 : 파일 외부에 공개한다.
extern : 파일 외부에 공개한다.
함수의 원형 선언ㅁ
static : 공개하지 않는 함수의 원형 선언(같은 파일 내에)
static 없을경우 : 공개하는 함수의 원형 선언
extern : 공개하는 함수의 원형 선언
출처 : 일상에서의 탈출 (다음 블로그)