Study/ETC & TIP

static !!

Answer Choi 2015. 3. 5. 10:05
반응형


C와 JAVA에는 둘다 static이 있습니다.


하지만 같은듯 하면서도 둘은 언어에 따라 완전 다른 역할을 합니다.


C에서의 static!!


C에서는 static을 선언하면, 선언한 함수나 선언한 C파일(*.C)에서만 사용가능하며, 


초기화는 처음 컴파일할때만 하게 됩니다.


즉, 정적이면서도, 지역변수가 되는 거지요.


예를 들어 아래의 함수가 있다고 한다면


  1. void ex(void)
  2. {
  3.     int a=0;
  4.     static int b=0;
  5.     a++;
  6.     b++;
  7.     printf("a=%d  b=%d\n",a,b);
  8. }
  9.  
  10. int main(void)
  11. {
  12.     while(1)
  13.     {
  14.         ex();
  15.     }
  16. }

a의 값은 계속해서 0으로 출력이 되지만, b의 값은 점점 증가할 것입니다.


또한 main에서는 저 b라는 변수에 접근을 할 수가 없습니다.


아래와 같이 전역에서 static으로 선언해야 같은 소스파일 내에서는 서로 접근 가능합니다.


  1. static int b=0;
  2.  
  3. void ex(void)
  4. {
  5.     int a=0;
  6.     a++;
  7.     b++;
  8.     printf("a=%d  b=%d\n",a,b);
  9. }
  10.  
  11. int main(void)
  12. {
  13.     while(1)
  14.     {
  15.         ex();
  16.         printf("again show b=%d\n",b);    
  17.     }
  18. }

하지만 다른 소스파일에서는 접근이 불가능하죠!!


다른 소스파일에서 접근하려면, static이 아닌 header파일에서 extern으로 선언해야 합니다.



이제 JAVA로 넘어오면, static은 좀 다른의미로 쓰입니다.


C와 JAVA 모두 static을 정적메모리에 올리는 건 같지만, JAVA에서는 extern의 의미도 포함합니다.


즉, JAVA에서는 한 소스파일에서 static으로 선언을 하면, 또다른 소스파일에서 접근이 가능합니다.



반응형