IT공부

[C] C언어 전역변수, static 변수 vs Java static 변수

shine94 2025. 2. 11. 17:10

* C언어에서의 전역 변수(Global Variable) : 모든 파일 접근 가능

- 모든 파일에서 접근 가능(extern을 사용하면 다른 파일에서도 접근 가능)

- 프로그램이 시작될 때 할당되고 종료될 때 해제됨(데이터 영역에 저장)

- 여러 파일에서 공유 가능

 

 * C언어에서의 static 변수

(1) static 전역 변수 : 같은 파일 접근 가능

   - 같은 파일 내에서만 접근 가능(파일 스코프)

   - 다른 파일에서 extern으로 접근할 수 없음

   - 프로그램 시작될 때 할당되고 종료될 때 해제됨(데이터 영역에 저장)

 

(2) static 지역 변수 : 소속된 함수 내부에서만 접근 가능

   - 해당 함수 안에서만 접근 가능하지만, 값은 유지됨

   - 일반 지역 변수는 함수가 끝나면 사라지지만, static 지역 변수는 함수가 끝나도 값이 유지됨

   - 해당 함수가 처음 호출될 때 한 번만 할당되며, 이후 프로그램이 종료될 때 해제됨(데이터 영역에 저장)

 

* Java에서의 static 변수 : 클래스에서 관리되며, 접근 제어자에 따라 어디서든 접근 가능할 수도 있음

- 클래스 단위로 관리되는 변수

- 객체마다 따로 존재하지 않고, 클래스 전체에서 공유됨

- 클래스를 처음 사용할 때(static 멤버에 접근할 때) 한 번만 메모리에 로드됨

- 모든 객체가 같은 변수를 공유함

 


 

* Java의 static 변수는 전역 변수와 비슷한 점이 많다

- 전역 변수처럼 프로그램 실행 내내 유지됨

- 접근 제어자에 따라 클래스 이름을 통해 어디서든 접근 가능할 수도 있음

- 여러 객체가 같은 값을 공유함

 

* 하지만 완전한 전역 변수는 아니다

- private을 사용하면 외부 접근을 막을 수 있음

- 클래스를 처음 사용할 때(static 멤버에 접근할 때) 메모리에 로드됨(지연 로드 가능)

- C의 전역 변수처럼 무조건 처음부터 존재하는 것이 아님

 

* 즉, Java의 static 변수는 제어 가능한 전역 변수로 볼 수 있음

 

'IT공부' 카테고리의 다른 글

[운영체제] 시스템 콜(System Call)  (0) 2025.02.27
[C] 문자열 함수  (0) 2025.02.01
[ETC] 메모리 원자성과 DB 원자성  (0) 2025.01.24
[C++] 접근 제어자 private 자바와의 차이점  (0) 2024.12.29
[ETC] 레드 블랙 트리  (0) 2024.12.19