[Java] 전역(glpbal)변수, 정적(static)변수
본문 바로가기
Java

[Java] 전역(glpbal)변수, 정적(static)변수

by IYK2h 2022. 3. 25.
728x90

*전역 (global) 변수 *

class 안의 전체영역에서 사용하는 변수

전역변수 값은 new 를 만나면 초기화 되는데, 최기화 되지 않는 값을 유지하려면 static 변수를 사용하면 된다.


라이프 타임 : 프로그램이 끝날때까지

scope가 없는 곳에서 "int g_test" 선언

다른 파일에서 사용하기 위해서는(다른 파일에서 해당 변수 접근 가능) (C/C++ 에서 가능, JAVA는 불가능)

"extern int g_test" 이런식으로 선언하고 사용한다.( 다른 파일의 전역변수를 가져다 사용하는 것은 좋은 방법이 아니다. )

정적 (static) 변수 : 여러 인스턴스가 공유해서 사용할 수 있는 변수

각 인스턴스는 같은 클래스 기반으로 생성되지만 각각 차지하는 메모리의 공간이 다른 개별 객체로 여기에 속한 속성 값(멤버 변수 값) 또한 각각 다른 값을 가지게 된다.

프로그래밍을 하다보면 생성된 인스턴스를 공유해야 하는 일이 생긴다. 이렇게 인스턴스를 공유해서 사용할 수 있는 변수가 static 변수이다.


라이프 타임 : 프로그램이 끝날때까지

해당 변수가 선언된 scope에 따라서 접근 가능한 범위가 결정된다.

"static int s_test" 선언 다른 파일에서는 접근 할 수 없다.

파일내에서만 scope에 맞게 접근 가능

정적 면수는 본문에서 사용하지 않으면 아예 메모리 상에 올라오지 않는다.

정적 객체의 경우 처음 구문이 수행되는 시점에 생성자를 호출하도록 할 수 있다. 이를 함수화 하여 호출 시점 조정 가능

 

*인스턴스(instance) : 자바는 class를 만들고 class 내부에 속성과 메서드를 정의하는 것을 기반으로 프로그램이 이루어진다. 여기에 선언된 변수는 추후 new 키워드를 통해 힙 메모리에 공간을 차지하여 생성된 것

728x90

'Java' 카테고리의 다른 글

[Java] "== vs equals"  (0) 2022.05.27
[Java] 스코프(scope) : { }  (0) 2022.05.20
[Java] 암시적 형변환  (0) 2022.05.17
[Java] 상수, 리터럴  (0) 2022.05.10
[Java] 리플렉션  (0) 2022.03.15

댓글